Re: Java thread
Jack wrote:
For Java thread, how to ensure that wait() does not miss notify()?
Otherwise the thread will hang and can not shut down.
For example in the following code:
while(true)
{
doSomeThing(); //Do some operation once a day
wait(24 * 3600); //sleep for one day. LINE1
}
The thread blocks at LINE1 for one day. When the program shuts down,
if the notify() is missing, then the program will hang.
That is not accurate. You failed to synchronize (using the 'synchronized' k=
eyword) on a monitor, so the call to 'wait()' is not legitimate.
Also, when the program shuts down, it cannot hang, because it has shut down=
..
Read the documentation:
<http://download.oracle.com/javase/7/docs/api/java/lang/Object.html#wait(lo=
ng)>
_et seq_
The Javadocs also recommend reading Josh Bloch's _Effective Java_ Use the =
latest edition; the Javadocs' recommendation is old. To that I'll add _Jav=
a Concurrency in Practice_ by Brian Goetz, _et al._
Unfortunately I don't find an update to Doug Lea's _Concurrent Programming =
in Java_ that takes into account the changes in the Java language since the=
2nd edition was published twelve years ago. Any book on concurrent Java p=
rogramming prior to Java 5 will not help.
<http://java.sun.com/docs/books/effective/>
<http://jcip.net/>
Read the documentation.
--
Lew