This question already has answers here:
Do spurious wakeups in Java actually happen?
(7 answers)
Closed 8 years ago.
What is the meaning of spurious wakeups in Java? Why they are so dangerous? Can you explain it with an example?
The JVM is allowed to wake a waiting thread without another thread calling its notify() method - a so called "spurious wakeup".
If you don't consider this possibility, you may proceed with processing when the wait state has not been achieved, leading to incorrect behaviour.
The correct approach when woken up is to first check that the state your thread is waiting on has actually been achieved, otherwise return to waiting by immediately calling wait()
Related
This question already has answers here:
What does java.lang.Thread.interrupt() do?
(10 answers)
Closed 4 years ago.
I know how to interrupt a thread. But I want to know how interrupt method works internally in java multi threading ?
Here's a simplistic answer. If the thread is in a wait condition, an InterruptedException is thrown. If the thread is active, the thread's interrupted flag is set.
This question already has answers here:
Is using Object.wait and Object.notify directly a code smell?
(2 answers)
Closed 7 years ago.
My question is about using wait() and notify() explicitly. Whould we try to avoid it every time we need something like producer-consumer and consider to use BlockingDeque instead.
I tried to think about it and didn't find more or less reasonble explanation. Moreover I tried to invent example where we would have to use wait() and notify() explicitly and failed.
There are better higher level constructs in java.util.concurrent, so using wait/notify nowadays is highly dubious.
This question already has answers here:
What is a deadlock?
(19 answers)
Closed 9 years ago.
What is deadlock in programming Object Oriented ?
I had knew deadlock in transaction of Database Systems. But in programming I'm not clear.
I want to know when deadlock occur and how to resolve it.
Thanks!
A deadlock is when you have two or more processes that are each waiting for the other to finish. When this happens, neither one can continue and the program essentially stalls.
There is a basic example here
http://docs.oracle.com/javase/tutorial/essential/concurrency/deadlock.html
well documented.
but, a deadlock occurs when you wait for a object to be freed but that condition is never achieved.
This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
Handling InterruptedException in Java
I wonder how InterruptedException should be properly handled. What actions should be performed in catch block? Are there any circumstances when the exception should be delegated to the higher level class?
The point of InterruptedException is to allow a blocking method to cancel early, when requested. The one thing you shouldn't do is nothing; don't just swallow the exception.
If you can't throw the exception from your method, calling Thread.currentThread().interrupt() is usually a good bet.
Check out Brian Goetz's article, http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html, for a good discussion on this topic. Edit: looks like somebody suggested this article already - in any case, it's a good read.
This question already has answers here:
Write to FileOutputStream from multiple threads in Java
(4 answers)
Closed 5 years ago.
Is there any thread-safe substitute for java.io.OutputStreamWriter in the JDK or some third party library?
None that I know of.
But you can use other means to effectively achieve thread-safety, like protecting the OutputStreamWriter with some monitor, Lock, or Semaphore. Also, you can use a single-threaded ExecutorService as a unique bottleneck through which other threads submit writing "jobs".
I answered this question: Write to FileOutputStream from multiple threads in Java
, which is exactly the same.
The short answer is no, but there are ways around it.