java.util.concurrentAPI 提供了一个名为 as 的类Lock,它基本上会序列化控件以访问关键资源。它给出了 和 等park()方法unpark()。
java.util.concurrent
Lock
park()
unpark()
如果我们可以使用synchronized关键字和使用wait()方法,我们可以做类似的事情notify() notifyAll()。
synchronized
wait()
notify() notifyAll()
我想知道其中哪一个在实践中更好,为什么?
如果您只是锁定一个对象,我更喜欢使用synchronized
例子:
Lock.acquire(); doSomethingNifty(); // Throws a NPE! Lock.release(); // Oh noes, we never release the lock!
你必须在try{} finally{}任何地方明确地做。
try{} finally{}
而使用同步,它非常清楚并且不可能出错:
synchronized(myObject) { doSomethingNifty(); }
也就是说,Locks 对于无法以如此干净的方式获取和释放的更复杂的事情可能更有用。老实说,我宁愿首先避免使用裸Locks,而只使用更复杂的并发控制,例如 aCyclicBarrier或 a LinkedBlockingQueue,如果它们满足您的需求。
CyclicBarrier
LinkedBlockingQueue
我从来没有理由使用wait(),或者notify()但可能有一些好的。
notify()