失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java基础知识回顾之java Thread类学习(七)--java多线程安全问题(死锁)

java基础知识回顾之java Thread类学习(七)--java多线程安全问题(死锁)

时间:2023-11-15 01:04:12

相关推荐

java基础知识回顾之java Thread类学习(七)--java多线程安全问题(死锁)

死锁:是两个或者两个以上的线程被无限的阻塞,线程之间互相等待所需资源。

线程死锁产生的条件:

当两个线程相互调用Join()方法。当两个线程使用嵌套的同步代码块的时候,一个线程占用了另一个线程的锁,互相等待阻塞,就有可能产生死锁。

下面看代码:

代码1:死锁的案例

package com.lp.ecjtu.Thread;/*死锁:常见情景之一:同步的嵌套。*/class Ticket implements Runnable{private int num = 100;Object obj = new Object();boolean flag = true;public void run(){if(flag)while(true){synchronized(obj)//同步代码块里面调用同步函数{show();}}elsewhile(true)this.show();}public synchronized void show()//同步函数里面的调用同步代码块 {synchronized(obj){if(num>0){try{Thread.sleep(10);}catch (InterruptedException e){}System.out.println(Thread.currentThread().getName()+".....sale...."+num--);}}}}public class DeathLockThread1 {public static void main(String[] args) {Ticket t = new Ticket();Thread t1 = new Thread(t);Thread t2 = new Thread(t);t1.start();try{Thread.sleep(10);}catch(InterruptedException e){}t.flag = false;t2.start();}}

代码2:

package com.lp.ecjtu.Thread;class DeathLockRunable implements Runnable{private boolean flag;public DeathLockRunable(boolean flag){this.flag = flag;}@Overridepublic void run() {if(flag){synchronized (Lock.mylock1){System.out.println("if mylock1"+Thread.currentThread().getName());synchronized (Lock.mylock2){System.out.println("if mylock2"+Thread.currentThread().getName());}}}else{synchronized (Lock.mylock2){System.out.println("else mylock2"+Thread.currentThread().getName());synchronized (Lock.mylock1){System.out.println("else mylock1"+Thread.currentThread().getName());}}}}}class Lock{static Object mylock1 = new Object();static Object mylock2 = new Object();}public class DeathLockThread{public static void main(String[] args){Thread t1 = new Thread(new DeathLockRunable(true));Thread t2 = new Thread(new DeathLockRunable(false));t1.start();t2.start();}}

输出结果:if mylock1Thread-0

else mylock2Thread-1

如果觉得《java基础知识回顾之java Thread类学习(七)--java多线程安全问题(死锁)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。