对对象加锁的时候,哪些对象是在同步方法中
有两个对象都要被加锁
线程1先对A加锁,再对B加锁
线程2先对B加锁,再对A加锁
可能发生死锁
public class Main {
public static void main(String[] args) {
Object a = new Object();
Object b = new Object();
new ThreadLockTest(a,b,1).start();
new ThreadLockTest(a,b,2).start();
}
public static class ThreadLockTest extends Thread{
private Object a, b;
private Integer type;
public ThreadLockTest(Object a,Object b,Integer type){
this.a = a ;
this.b = b;
this.type = type;
}
public void run(){
while(true){
if(type == 1){
synchronized(a){
System.out.println(this.getName()+"对a加同步");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(b){
System.out.println(this.getName()+"对b同步");
}
}
}else{
synchronized(b){
System.out.println(this.getName()+"对b加同步");
synchronized(a){
System.out.println(this.getName()+"对a同步");
}
}
}
}
}
}
}
本文通过一个具体的Java程序示例,展示了如何因为不同线程对多个对象加锁顺序不一致而导致死锁的情况发生。该程序包含两个对象A和B,线程1先对A加锁再对B加锁,而线程2则相反,这种情况下如果两个线程同时运行,可能会导致互相等待对方释放锁而产生死锁。

2016

被折叠的 条评论
为什么被折叠?



