脚本宝典收集整理的这篇文章主要介绍了实现一个线程死锁,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
要想实现线程死锁,首先要清楚线程死锁的四个条件
class MyThread extends Thread{
//类属性被所有实例共享
static Object o1 = new Object();
static Object o2 = new Object();
public MyThread(int flag){
this.flag = flag;
}
@Override
public void run(){
if(flag == 0){
// 若flag==0 锁住o1
synchronized(o1){
System.out.println(flag + "锁住了o1");
// 线程睡眠,让出cpu,但不释放锁
Thread.sleep(1000);
// 请求锁对象o2,但o2被flag==1占用
synchronized(o2){
System.out.println(flag + "锁住了o2");
}
}
// 线程死锁,无法继续执行
System.out.println(flag + "释放了o1和o2");
}
if(flag == 1){
// 若flag==1 锁住o2
synchronized(o2){
System.out.println(flag + "锁住了o2");
// 线程睡眠,让出cpu,但不释放锁
Thread.sleep(1000);
// 请求锁对象o1,但o1被flag==0占用
synchronized(o1){
System.out.println(flag + "锁住了o1");
}
// 线程死锁,无法继续执行
System.out.println(flag + "释放了o1和o2");
}
}
}
}
public class ThreadDeadLock{
public static void main(String[] args){
MyThread t1 = new MyThread(0);
MyThread t2 = new MyThread(1);
t1.start();
t2.start();
}
}
以上是脚本宝典为你收集整理的实现一个线程死锁全部内容,希望文章能够帮你解决实现一个线程死锁所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。