线程中的死锁问题
来源:互联网 发布:台服dnf登陆器源码 编辑:程序博客网 时间:2024/05/16 06:18
线程中的死锁都是发生在多个线程中的,多个线程中存在多个同步锁,这几个线程相互索取对方锁的钥匙造成的僵持局面
多个线程中的多个同步锁,先后索取对方锁的钥匙时,有时也会出现和谐的状态,如两个人吵架,相互不让,结果某一刻突然相互谅解了对方就进入和谐的状态了。
下面是一个线程死锁的例子:
例:
class RunnableImp implements Runnable{ boolean flag = true; Object obj1 = new Object(); Object obj2 = new Object(); public void run(){ if(flag){ synchronized(obj1){//第一个线程1先获得obj1对象锁,并将其锁住 System.out.println(Thread.currentThread().getName()+"先获得obj1"); try{ Thread.sleep(1000);//先让线程1睡眠一段时间,让线程2有时间去获得obje2对象锁 }catch(Exception e){} synchronized(obj2){//线程1醒来后,想去获得obj2锁,但是此锁已经被线程2获得并锁住了,所以需要等待线程2解开obj2锁 System.out.println(Thread.currentThread().getName()+"想获得obj2"); } } }else{ synchronized(obj2){//第二个线程2在线程1睡眠时先获得obj2对象锁,同样也将其锁住 System.out.println(Thread.currentThread().getName()+"先获得obj2"); try{ Thread.sleep(1000);//让线程2睡眠一段时间,如果线程2先启动,就可以先让线程1先去获得obj1锁 }catch(Exception e){} synchronized(obj1){ System.out.println(Thread.currentThread().getName()+"想获得obj1"); } } } }}public class TestRunnable{ public static void main(String[] args) { RunnableImp r = new RunnableImp(); Thread t1 = new Thread(r,"线程1"); Thread t2 = new Thread(r,"线程2"); t1.start(); try{ Thread.sleep(100); }catch(Exception e){} r.flag = false; t2.start(); }}
死锁分析:
- 线程中的死锁问题
- 多线程中的线程通信以及死锁问题
- 并发线程中的死锁
- 线程中的死锁
- 线程死锁问题
- 线程死锁问题
- 线程死锁问题
- java线程死锁问题
- 线程死锁问题
- 线程死锁问题
- 线程死锁的问题
- 线程-模拟死锁问题
- java线程死锁问题
- 线程死锁问题
- 线程死锁问题
- 线程死锁问题
- 线程死锁问题
- 线程死锁问题
- IT公司管理小技巧
- 常用的DOS命令
- Linux 常见命令(free, top)
- 自定义对话框实现
- div ul li模拟下拉选项(option标签)
- 线程中的死锁问题
- 超易药品进销存软件 V3.11
- TextRange对象的学习(一)
- A标签触发onclick事件而不跳转
- 三个有关jsp页面操作的小错误 ¶
- Google Chart API 生成图片
- jquery 选中checkbox兼容问题
- 检测哪个HTML标签触发的事件
- div背景半透明 覆盖整个可视区域的遮罩层效果