私が持っているとしましょう -
public class ThreadingIssue {
public B b = new B();
}
class B{
private final Object lock = new Object();
public void someMethod(int timeOut){
synchronized(lock){
try{
lock.wait(timeOut);
}catch(Exception e){
}
// some task..
lock.notifyAll();
}
}
}
class Thread1 implements Runnable{
private ThreadingIssue t;
public Thread1(ThreadingIssue issue) {
t = issue;
}
public void run(){
while(true){
t.b.someMethod(5000);
}
}
}
class Thread2 implements Runnable{
private ThreadingIssue t;
public Thread2(ThreadingIssue issue){
t = issue;
}
public void run(){
try{
Thread.sleep(2000);
}catch(Exception e){
}
t.b = null;
}
}
Thread1 が B の内部someMethod(5000)
にあり、ロックを待っていて、Thread2 が B のオブジェクトを null にした場合、Thread1 はどうなるでしょうか? Thread1がどの例外をスローするかどうかはわかりません..助けはありますか?