线程死锁问题

package com.day03;

/**
* @author anyan
* @date 2021/5/9-16:21
*/
/*
让线程进入死锁的方法
在开发中慎重使用synchronized嵌套,否则会出现死锁问题,程序不会报错,因此调试时很难发现
*/
public class DeadLock {
public static void main(String[] args) {
Object object1=new Object();
Object object2=new Object();
ThreadOne t1=new ThreadOne(object1,object2);
ThreadTwo t2=new ThreadTwo(object1,object2);
t1.start();
/*// 如果在两个线程中间加一个延迟,可以解决极大可能存在的死锁问题,或者减少死锁的时间
try {
Thread.sleep(1000*5);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
t2.start();
}
}
class ThreadOne extends Thread {
Object obj1;
Object obj2;
public ThreadOne(Object obj1,Object obj2){
this.obj1=obj1;
this.obj2=obj2;
}
public void run(){
synchronized(obj1) {//先锁住obj1
System.out.println(1.1);
try {
Thread.sleep(1000);//增加睡眠,一定会发生死锁
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj2){//后锁住obj2,指导Obj2被锁住,该方法才会被结束,否则一直执行
System.out.println(1.2);
}
}
}
}
class ThreadTwo extends Thread{
Object obj1;
Object obj2;
public ThreadTwo(Object obj1,Object obj2){
this.obj1=obj1;
this.obj2=obj2;
}
public void run(){
synchronized(obj2){
System.out.println(2.1);
synchronized(obj1){
System.out.println(2.2);
}
}
}
}
posted @ 2021-05-09 16:48  安妍  阅读(66)  评论(0)    收藏  举报