2015-03-02 36 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"); 
     } 
    } 
} 

以上說明了什麼被稱爲鎖排序死鎖