这里我在try块中使用wait()方法来进行线程之间的相互通信。我在try块之外使用了wait方法,但它显示异常。
try
{
System.out.println(" why we should use wait() method in try block ");
wait();
}
catch()
{
}
}
答案 0 :(得分:3)
问:我们为什么要在try块中使用wait()方法?
您在wait()
块或synchronized
方法中使用synchronized
。
synchronized (this) {
while (!this.isTeapot) {
this.wait();
}
System.out.println("I am a teapot");
}
另一种方法......
synchronized (this) {
this.isTeapot = true;
this.notify();
}
为什么呢?
IllegalMonitorStateException
但为什么?
try
块不是必需的。如果您需要处理该级别的 ,请使用try
块。如果没有,请允许它传播。这包括InterruptedException
...虽然因为它是一个经过检查的异常,如果你没有在本地捕获它,你需要在方法的throws
子句中声明它。但这只是普通的Java异常处理。没什么特别的。
例如:
try {
synchronized (this) {
while (!this.isTeapot) {
this.wait();
}
System.out.println("I am a teapot");
}
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
(有关上述示例的说明,请参阅Why would you catch InterruptedException to call Thread.currentThread.interrupt()?。)
问:我们可以在try块外使用wait()方法吗?
您无法在wait()
阻止或synchronized
方法之外呼叫synchronized
。 (见上文。)
try
块不是必需的。 (见上文。)