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线程安全问题
HashMap为什么是线程不安全的?如何解决HashMap的线程不安全问题?
内容概要:文章内容从原子性、可见性、有序性三个方面介绍C++线程安全问题的原因。通过原子操作、线程同步如互斥锁、读写锁、条件变量、信号量等方法解决C++线程安全问题。同时介绍了线程安全的单例,饿汉模式和懒汉...
栈的线程安全问题 的解决代码 push pop synchronized THread
ProC 线程安全问题案例,多线程proc开发简单介绍
servlet与Struts action线程安全问题分析
下面小编就为大家分享一篇浅谈C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题,具有很好的参考价值,希望对大家有所帮助
高级程序员必会的HashMap的线程安全问题,适用于0~2年的
深入研究Servlet线程安全性问题...
最近在做多线程方面的工作,工作中发现多线程中很多坑,这里就有一个List添加对象的误区,解释了List容量扩展后内存开辟导致的线程不安全性的问题,这里做个分享跟大家讲讲这个坑是怎么形成的怎么样避免。
解决利用timer循环扫描导致的控件跨界问题,以及控件被多线程占用问题,本人资源全部免费,有需要的朋友直接下载吧
c++ stl线程安全 c++ stl线程安全 c++ stl线程安全
java ,线程通信安全问题 ,属于入门代码,简单。 不喜勿喷呀。
什么是线程安全? 答:线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等...
其实java的多线程并发问题最终都会反映在java的内存模型上,所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改。总结java的内存模型,要解决两个主要的问题:可见性和有序性。我们都知道计算机有高速缓存...
你还在用synchronized?线程安全相关知识深入剖析
Delphi多线程的安全问题分析及解决,实现多线程的安全
该文件中实例说明了如何在Labwindows/cvi中使用线程锁和线程安全变量进行多线程程序设计
C++线程安全日志库-Win32接口实现,博客讲解:https://www.cnblogs.com/swarmbees/ ->C++线程安全日志库-Win32接口实现
线程安全的单例模式 线程安全的单例模式 线程安全的单例模式