`

关于线程安全问题

    博客分类:
  • Java
 
阅读更多

2016.12.01

 

明天就开始了,一点书都看不进去,还是撸代码吧,现在想把基础打牢一点,所以还要自己看下书。

java的同步机制解决了线程安全问题,但也引发了死锁现象。

死锁现象出现的根本原因是

1.存在两个或者是两个以上的线程。

2.存在两个或者是两个以上的共享。

死锁现象没有解决方案,只能避免。

下面用一段代码实现。

class DeadLock extends Thread{
	
	public DeadLock(String name){
		super(name);//相当于调用父类的构造函数,如果没有这个就不能初始化父类
	}
	
	
	public void run() {
		if("庹成".equals(Thread.currentThread().getName())){
			synchronized ("遥控器") {
				System.out.println("庹成拿到了遥控器,准备 去拿电池!!");
				synchronized ("电池") {
					System.out.println("庹成拿到了遥控器与电池了,开着空调爽歪歪的吹着...");
				}
			}
		}else if("崔宝文".equals(Thread.currentThread().getName())){
			synchronized ("电池") { 
				System.out.println("崔宝文拿到了电池,准备去拿遥控器!!");
				synchronized ("遥控器") {
					System.out.println("崔宝文拿到了遥控器与电池了,开着空调爽歪歪的吹着...");
				}
			}
			
		}	
	}
		
}

public class Demo2 {

	public static void main(String[] args) {
		DeadLock d1 = new DeadLock("庹成");
		DeadLock d2 = new DeadLock("崔宝文");
		//开启线程
		d1.start();
		d2.start();	
	}	
}

  运行结果会出现:

  庹成拿到了遥控器,准备 去拿电池!!

  崔宝文拿到了电池,准备去拿遥控器!!

  没啦。。

 

分享到:
评论

相关推荐

    servlet线程安全问题

    Servlet 线程安全问题 Servlet 线程安全问题是指在使用 Servlet 编程时,如果不注意多线程安全性问题,可能会导致难以发现的错误。Servlet/JSP 技术由于其多线程运行而具有很高的执行效率,但这也意味着需要非常...

    关于如何解决HashMap线程安全问题的介绍

    4. 避免在多线程环境中直接使用HashMap:如果你确定不需要在多线程环境下共享HashMap,那么可以考虑局部变量的方式,只在单个线程中使用HashMap,这样就无需担心线程安全问题。 总结起来,理解HashMap的线程不安全...

    C++线程安全问题及解决方法,C++智能指针

    内容概要:文章内容从原子性、可见性、有序性三个方面介绍C++线程安全问题的原因。通过原子操作、线程同步如互斥锁、读写锁、条件变量、信号量等方法解决C++线程安全问题。同时介绍了线程安全的单例,饿汉模式和懒汉...

    servlet与Struts action线程安全问题分析

    Servlet和Struts Action是两种常见的Java Web开发组件,它们在多线程环境下运行时可能存在线程安全问题。线程安全是指在多线程环境中,一个类或者方法能够正确处理多个线程的并发访问,保证数据的一致性和完整性。 ...

    浅谈C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题

    浅谈C#跨线程调用窗体控件引发的线程安全问题 C#跨线程调用窗体控件时可能会引发线程安全问题,例如当多个线程操作同一个控件时,该控件可能会进入不一致的状态,出现争用情况和死锁等问题。因此,确保以线程安全...

    unix_linux线程安全问题

    多线程编程带来的并发执行是其与生俱来的优势,但同时也引入了一系列的问题,尤其是线程安全问题。 线程安全问题主要来源于多个线程对共享资源的访问。如果多个线程同时访问同一个资源,且没有适当的同步机制,就...

    Stack 线程安全问题

    栈的线程安全问题 的解决代码 push pop synchronized THread

    C#多线程List的非线程安全性

    本文将深入探讨在多线程环境中使用List时遇到的非线程安全问题,并提供相应的解决方案和最佳实践。 List是.NET框架中常用的一个动态数组,它提供了方便的增删改查操作。然而,List并未设计为线程安全的容器,这意味...

    Java多线程 - (一) 最简单的线程安全问题

    本篇文章将深入探讨“最简单的线程安全问题”,并结合相关源码和工具来帮助理解。线程安全问题通常涉及到多个线程对共享资源的访问,如果管理不当,可能会导致数据不一致、死锁等问题。 首先,我们需要了解什么是...

    高级程序员必会的HashMap的线程安全问题,适用于0~2年的.7z

    然而,对于多线程环境,HashMap并不是线程安全的,这在并发编程中可能会引发一系列问题。本篇将深入探讨HashMap的线程安全问题,并提供相关的解决方案。 首先,我们需要了解HashMap在多线程环境下可能出现的问题: ...

    struts1,struts2,webwork,线程安全问题

    ### Struts1、Struts2、WebWork框架中的线程安全问题分析 #### 一、Struts1与线程安全问题 在Struts1中,每个`Action`类实例是被多个请求重用的,这使得它在多线程环境下存在潜在的线程安全问题。当多个线程同时...

    CVI 线程锁、线程安全变量实例

    在计算机编程领域,尤其是涉及到实时系统和并发编程时,线程锁和线程安全变量是至关重要的概念。LabWindows/CVI是一种流行的交互式C开发环境,特别适合于开发科学和工程应用。本实例将深入探讨如何在LabWindows/CVI...

    c# 线程安全队列的用法原理及使用示例

    什么是线程安全? 答:线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等...

    java线程安全测试

    Java线程安全是多线程编程中的一个关键概念,它涉及到多个线程访问共享资源时可能出现的问题。在Java中,线程安全问题通常与并发、内存模型和可见性有关。Java内存模型(JMM)定义了如何在多线程环境下共享数据的...

    mysql是线程不安全的,mysql不是线程安全的,多线程共用同一个mysql连接是会崩溃的.所以同样QT的QSqlDatabase也是线程不安全的,QS会崩溃

    mysql是线程不安全的,mysql不是线程安全的,多线程共用同一个mysql连接是会崩溃的 QT的QSqlDatabase是基于mysql的,所以一样是线程不安全的 现讲明mysql为什么是线程不安全的,以及在多线程环境下如何使用mysql,...

    Java多线程-线程的安全问题与线程的同步机制介绍

    当多个线程访问同一个资源时,如果只有读操作那么不会出现线程安全问题,但是如果多个线程对资源进行读和写操作时,就容易出现线程安全问题。下面我们来具体介绍线程安全问题和线程的同步机制。 一、线程安全问题 ...

    线程通信安全问题

    线程通信安全问题是指在多线程环境下,如何保证多个线程对共享资源进行访问时的正确性和一致性。在这个场景下,我们主要探讨的是Java中的线程等待唤醒机制,这是一个用于解决线程同步问题的关键工具。 首先,我们要...

    局部变量线程安全测试

    例如,如果局部变量引用了非线程安全的对象(如全局变量、静态变量或者共享资源),或者通过某种方式(如闭包)使得局部变量的生命周期超出了其定义的代码块,那么就可能出现线程安全问题。因此,即使变量本身是局部...

    C++日志库-线程安全

    线程安全的日志库在多线程环境下尤为重要,因为不正确的日志操作可能会导致数据竞争和同步问题。本文将详细讨论如何在C++中实现一个基于Win32接口的线程安全日志库,并关注其核心概念和技术。 首先,我们需要理解...

    ProC 线程安全问题案例

    然而,如果不正确地处理线程安全问题,可能会导致程序运行异常甚至崩溃。 在上述的“Pro*C线程安全问题案例”中,问题出在一个名为`ProcHandle::Test`的函数上。这个函数用于删除名为`Test`的表中RULEID为`s_RuleID...

Global site tag (gtag.js) - Google Analytics