私は最近いくつかのインタビューを受けました。インタビュアーは保証付きデッドロックの作成を依頼しました。私は次のように書いたしている待機/通知で保証されたデッドロックを書き込む方法
:それはguarantedするされていることを私は確信している場合
public class DeadLockThreadSleep {
private static class MyThread implements Runnable {
private Object o1;
private Object o2;
@Override
public void run() {
try {
test(o1, o2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public MyThread(Object o1, Object o2) {
this.o1 = o1;
this.o2 = o2;
}
public void test(Object o1, Object o2) throws InterruptedException {
synchronized (o1) {
System.out.println("1.acquired: " + o1);
Thread.sleep(1000);
synchronized (o2) {
System.out.println("2.acquired: " + o2);
}
}
}
}
public static void main(String[] args) {
Object o1 = new Object();
Object o2 = new Object();
new Thread(new MyThread(o1, o2)).start();
new Thread(new MyThread(o2, o1)).start();
}
}
それから彼は尋ねました。私はThread.sleepを何も保証しませんでした。
は、その後、私はこのコードを書いた:
public static void main(String[] args) {
final Thread mainThread = Thread.currentThread();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
mainThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
この答えが受け入れられました。
また、彼は待機/通知によってアナログを書くように頼んだ。私はたくさん考えていましたが、これを書く方法を想像することはできません。
可能ですか?
http://stackoverflow.com/questions/19908498/deadlocks-using-wait-and-notify – assylias
@assyliasこのトピックを読んでいます。一番上の投票で答えは答えではありません – gstackoverflow