是否有一个场景(除了与古代JVM的兼容性以外),使用场景比synchronized
使用Lock
?谁能证明使用wait
或使用notify
较新的系统?
是否有任何算法必须在实现中使用其中之一?
我看到先前的问题涉及到此问题,但我想更进一步,实际上是deprecate
这些问题。新设施已经消除了太多的陷阱,陷阱和警告。我只是觉得可能快要把它们标记为过时了。
是否有一个场景(除了与古代JVM的兼容性以外),使用场景比synchronized
使用Lock
?谁能证明使用wait
或使用notify
较新的系统?
是否有任何算法必须在实现中使用其中之一?
我看到先前的问题涉及到此问题,但我想更进一步,实际上是deprecate
这些问题。新设施已经消除了太多的陷阱,陷阱和警告。我只是觉得可能快要把它们标记为过时了。
Answers:
是否有任何算法必须在实现中使用其中之一?
几乎可以肯定。(实际上,从理论上讲,您应该能够使用其他java.util.concurrent ..类来模拟wait / notify 。并且可以用显式的Lock操作来替换sync……尽管您需要注意解锁finally
条款。)
不过,也有大概的算法,其中在Java中,表现最好的实现涉及直接使用同步,有或没有等待和通知。
是时候弃用同步,等待并通知了吗?
不管上一个问题的答案是什么,答案都是肯定的。
等待/通知可以(并且经常)正确使用。在Java中,不赞成使用保留给已损坏的类和方法。即在紧急情况下应纠正继续使用的地方。如果Sun(现在是Oracle)不赞成使用诸如等待/通知之类的基本功能,则它们将为大量的遗留代码造成严重的兼容性问题。那不符合任何人的利益。
如果您想摆脱代码中的同步/等待/通知,那很好。但是弃用要求重写大量本质上正确的多线程代码,这将是一个糟糕的想法。企业IT经理和软件产品经理会讨厌您的建议...
根据Java文档,值得阅读“不赞成使用”的含义:http : //docs.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html
还要注意,我们正在谈论过时的东西,这是Java语言的核心。弃用会synchronized
产生巨大的后果。
java.util.concurrent
util类实际上更快。这些类在后台直接与VM对话,在同步时,VM在对象图中的对象上安装了钝锁,从而影响了全局性能。
synchronized
et。,请原谅我@Stephen 。等 我只是建议弃用,这实际上只是说不要将其用于新代码。我不会幻想建议破坏性的经过测试的遗留代码,要求将其删除。