问题:在第一个线程中没有调用sleep()方法时,执行程序后没有出现死锁
原因:第一个线程获得o锁后,第二个线程还没有获得o2锁,所以没有资源冲突
解决方法:第一个线程获得o锁后,让第一个线程sleep2秒,让第二个线程获得o2锁,
查看死锁的方法
①打开cmd
②执行 jps查看程序 号
③执行 jstack 程序号 来看是否发生死锁
public class Deadsuo {
static Object o = new Object();
static Object o2 = new Object();
public static void main(String[] args) {
new Thread(()->{
synchronized (o){
System.out.println("have o expect o2");
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o2){
System.out.println("have o2");
}
}
},"A").start();
new Thread(()->{
synchronized (o2){
System.out.println("have o2 expect o");
synchronized (o){
System.out.println("have o");
}
}
},"B").start();
}
}