ниже вопрос...
void waitForSignal() {
Object obj = new Object();
synchronized (Thread.currentThread()) {
obj.wait();
obj.notify();
}
}
Какое из утверждений верно?
О. Этот код может вызвать ошибку InterruptedException
.
B. Этот код может вызвать ошибку IllegalMonitorStateException
.
C. Этот код может выдать TimeoutException
через десять минут.
D. Изменение порядка obj.wait()
и obj.notify()
может привести к нормальному завершению этого метода.
E. Вызов notify()
или notifyAll()
из другого потока может привести к нормальному завершению этого метода.
F. Этот код НЕ скомпилируется, если obj.wait()
не будет заменено на ((Thread) obj).wait()
.
Ответ Б. Но когда я выполнил описанным ниже образом, получил A. Пожалуйста, помогите.
public class ThreadStateProblem extends Thread {
public void run() {
}
void waitForSignal() {
Object obj = new Object();
synchronized (Thread.currentThread()) {
obj.wait();
obj.notify();
}
}
public static void main(String []s) {
new ThreadStateProblem().start();
new ThreadStateProblem().waitForSignal();
}
}
А также попробовал ниже:
public class ThreadStateProblem extends Thread {
public void run() {
}
void waitForSignal() {
Object obj = new Object();
synchronized (Thread.currentThread()) {
obj.wait();
obj.notify();
}
}
public static void main(String []s) {
ThreadStateProblem sd =new ThreadStateProblem();
sd.start();
sd.waitForSignal();
}
}
start()
в одном потоке иwaitForSignal()
в другом. - person Darth Hunterix   schedule 20.02.2014waitForSignal()
в методеrun()
? - person Darth Hunterix   schedule 20.02.2014