在java中设计一个类导致死锁

时间:2015-03-02 08:28:04

标签: java multithreading

我是java新手学习java中的线程概念,我正在计划回答以下问题

class Deadlocker 
{ 
void  executedByThreadOne(); 
void  executedByThreadTwo(); 
}

提供上面类Deadlocker的简单实现,这样如果两个方法被不同的线程同时调用,就有可能出现死锁。 大家请告诉我们如何在java中设计类

2 个答案:

答案 0 :(得分:0)

阅读一些有关死锁的文献并思考如何在虚假环境中实现这一目标。

作为提示,您可能需要Thread.sleep让您的锁“重叠”。想象一下你的锁定过程就像一个“x”。线程1锁定A,然后休眠,然后锁定B.但是,当线程1处于休眠状态时,线程B必须锁定B然后尝试锁定A(已经被A锁定)。然后你就陷入了僵局。

答案 1 :(得分:0)

可能导致死锁的一个来源是锁。如果从一个线程调用method1而从另一个线程调用method2,则很可能会出现死锁:

Object lock1 = ...;
Object lock2 = ... ;

public void method1(){
synchronized (lock1) {
        Thread.sleep(100);
        synchronized (lock2) {
            System.out.println("Acquired both locks");
        }
    }
}
public void method2(){  
     synchronized (lock2) {
        Thread.sleep(100);
         synchronized (lock1) {
            System.out.println("Acquired both locks");
         }
     }
}

以上说明了所谓的锁定顺序死锁