两个线程是否可能面对单个对象实例的死锁?

时间:2019-01-31 10:01:03

标签: java deadlock

据我所知,两个线程至少需要两个对象并且需要一个循环等待状态来面对死锁。但是两个线程是否有可能面对以一个对象实例为中心的死锁呢?

2 个答案:

答案 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)

仅一个对象实例就不可能有死锁,因为两个线程将不会等待同一对象。如果某个线程正在使用该对象,则该线程不会等待该对象,因此无法创建脱扣。