据我所知,两个线程至少需要两个对象并且需要一个循环等待状态来面对死锁。但是两个线程是否有可能面对以一个对象实例为中心的死锁呢?
答案 0 :(得分:0)
不是死锁,但您可以轻松地使线程饥饿。
例如
Object lock=new Object();
Runnable run=new Runnable(){
public void run(){
synchronized(lock){
lock.wait();
}
System.out.println("Im out");
}
}
Thread t1=new Thread(someRun);
Thread t2=new Thread(someRun);
t1.start();
t2.start();
不会打印任何内容,并且将永远等待2个线程;
您不会在单个共享资源上陷入僵局。
答案 1 :(得分:0)
仅一个对象实例就不可能有死锁,因为两个线程将不会等待同一对象。如果某个线程正在使用该对象,则该线程不会等待该对象,因此无法创建脱扣。