我是新來的Java學習Java的線程的概念,我是刨去回答以下問題,下面設計在Java類造成的僵局
class Deadlocker
{
void executedByThreadOne();
void executedByThreadTwo();
}
提供上述這種簡單的實現類Deadlocker的,如果這兩種方法被不同的線程同時調用,會有死鎖的機會。 鄉親們請告知我們如何在java中設計課程
我是新來的Java學習Java的線程的概念,我是刨去回答以下問題,下面設計在Java類造成的僵局
class Deadlocker
{
void executedByThreadOne();
void executedByThreadTwo();
}
提供上述這種簡單的實現類Deadlocker的,如果這兩種方法被不同的線程同時調用,會有死鎖的機會。 鄉親們請告知我們如何在java中設計課程
閱讀關於死鎖的一些文獻並思考如何在假環境中實現這一目標。
作爲一個提示,你將propably需要Thread.sleep讓你的鎖「重疊」。想象你的鎖定過程就像一個「x」。線程1正在鎖定A,然後休眠,然後鎖定B.但是,當線程1正在休眠時,線程B必須鎖定B,然後嘗試鎖定A(已被A鎖定)。那麼你有你的僵局。
可能導致死鎖的一個來源是鎖。如果你從一個線程和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");
}
}
}
以上說明了什麼被稱爲鎖排序死鎖。
StackOverflow不是在這裏爲你做你的功課。如果您對該任務有任何具體問題,請告訴我們您迄今爲止所嘗試的內容以及爲什麼它不起作用。您可以編輯您的問題以添加該信息。 – mhlz 2015-03-02 08:35:19