2015-03-02 39 views
-6

我是新来的Java学习Java的线程的概念,我是刨去回答以下问题,下面设计在Java类造成的僵局

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

提供上述这种简单的实现类Deadlocker的,如果这两种方法被不同的线程同时调用,会有死锁的机会。 乡亲们请告知我们如何在java中设计课程

+0

StackOverflow不是在这里为你做你的功课。如果您对该任务有任何具体问题,请告诉我们您迄今为止所尝试的内容以及为什么它不起作用。您可以编辑您的问题以添加该信息。 – mhlz 2015-03-02 08:35:19

回答

0

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

作为一个提示,你将propably需要Thread.sleep让你的锁“重叠”。想象你的锁定过程就像一个“x”。线程1正在锁定A,然后休眠,然后锁定B.但是,当线程1正在休眠时,线程B必须锁定B,然后尝试锁定A(已被A锁定)。那么你有你的僵局。

0

可能导致死锁的一个来源是锁。如果你从一个线程和method2从其他调用方法1,将有越来越死锁的一个很大的机会:

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"); 
     } 
    } 
} 

以上说明了什么被称为锁排序死锁