死锁 过多的同步将产生死锁 ▪ 同步可以保证资源共享操作的正确性,但是过多同步也会产生死锁 ▪ 死锁一般情况下表示互相等待,是程序运行时出现的一种问题
线程1和线程2共用对象o1和o2,且它们都想要对方的锁,最终形成阻塞,一直等待下去,这种现象就是死锁 就比如 互不信任的两个人都想把自己手里的东西与对方交换,但因为都不信任对方,担心对方拿走自己的就跑了,就一直想让对方先拿出来,从而就一直等待着
public class ThreadWork2 implements Runnable{
public static Object o1 = new Object();
public static Object o2 = new Object();
public int flag;//属性,又叫成员变量
public ThreadWork2(int flag) {
this.flag = flag;
}
@Override
public void run() {
if(flag==1){
//代码块一
synchronized (o1){
System.out.println("one-1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o2){
System.out.println("one-2");
}
}
}else{
//代码块二
synchronized (o2){
System.out.println("two-1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o1){
System.out.println("two-2");
}
}
}
}
public static void main(String[] args) {
//创建线程1,flag 属性值为1
ThreadWork2 d1 = new ThreadWork2(1);
//创建线程2,flag 属性值为2
ThreadWork2 d2 = new ThreadWork2(2);
//启动线程1和线程2
new Thread(d1).start();
new Thread(d2).start();
}
}