這裏我使用try()方法中的wait()方法進行線程之間的相互通信。我在try塊外面使用了wait方法,但它顯示異常。爲什麼我們應該在try塊中使用wait()方法?我們可以在try塊外面使用wait()方法嗎?
try
{
System.out.println(" why we should use wait() method in try block ");
wait();
}
catch()
{
}
}
這裏我使用try()方法中的wait()方法進行線程之間的相互通信。我在try塊外面使用了wait方法,但它顯示異常。爲什麼我們應該在try塊中使用wait()方法?我們可以在try塊外面使用wait()方法嗎?
try
{
System.out.println(" why we should use wait() method in try block ");
wait();
}
catch()
{
}
}
問:爲什麼要使用wait()方法try塊內?
您使用wait()
一個塊或方法內。
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()?)
問:我們可以用wait()方法try塊外面?
你不能叫wait()
外塊或方法。 (見上文)
try
塊不是強制性的。 (參見上文)
up !!!嗨,你可能需要寫一個簡單的例子。即g:同步方法拋出拋出「等待」的異常。 –
如果您查看[Object#wait的JavaDocs](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait - ),你會看到它拋出兩個異常,'IllegalMonitorStateException',這是一個'RuntimeException'和'InterruptedException',這是一個被捕獲的異常,你必須處理,所以,不,你必須在' try-catch'或者拋出異常 – MadProgrammer
正如@MadProgrammer所說的,你必須捕獲InterruptedException,或者你的方法需要聲明它拋出它 – okaram
謝謝,它有很多幫助。 –