Is there a single scenario (other than compatibility with ancient JVMs) where using synchronized
is preferable to using a Lock
? Can anyone justify using wait
or notify
over the newer systems?
Is there any algorithm that must use one of them in its implementation?
I see a previous questions that touched on this matter but I would like to take this a little further and actually deprecate
them. There are far too many traps and pitfalls and caveats with them that have been ironed out with the new facilities. I just feel it may soon be time to mark them obsolete.
Best Answer
Almost certainly not. (Indeed, from the theoretical perspective, you should be able to simulate wait / notify using other java.util.concurrent.. classes. And synchronized could be replaced with explicit Lock operations ... though you would need to be careful to unlock in
finally
clauses.)However, there are probably algorithms where the best performing implementation in Java involves direct use of synchronized, with or without wait and notify.
Irrespective of the answer to the previous question, the answer is definitely no.
The wait / notify can be (and often are) used correctly. In Java, deprecation is reserved for classes and methods that are broken; i.e. where continued use should be corrected as a matter of urgency. If Sun (and now Oracle) deprecated something as fundamental and as widely used as wait/notify, they would be creating a serious compatibility problem for huge amounts of legacy code. That is NOT in anyone's interest.
If you want to get rid of synchronized / wait / notify in your code, that is fine. But deprecation calls for the rewriting of large amounts of essentially correct multi-threaded code, and that would be a BAD IDEA. Corporate IT managers and software product managers would hate you for suggesting it ...
It is worth reading what "deprecated" means according to the Java documentation: http://docs.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html
And also note that we are talking about deprecating stuff that is core to the Java language. Deprecating
synchronized
has huge consequences.