目前我正在學習Java中的併發編程。我注意到LockSupport.park()
在Java 1.6的推出更容易比Object.wait()
使用的Object.wait()
一個典型的用法是一樣`LockSupport.park()`可以代替Object.wait()嗎?
// Thread1
synchronized (lock) {
while (condition != true) {
lock.wait()
}
// do stuff
}
// Thread2
synchronized (lock) {
condition = true;
lock.notify();
}
我想我可以用它改寫LockSupport.park()
像
// Thread1
while (condition != true) {
LockSupport.park();
}
// do stuff
// Thread2
condition = true;
LockSupport.unpark(Thread1);
通過使用LockSupport.park()
,繁瑣的synchroinzed
塊消失。
我的問題是,我應該總喜歡LockSupport.park()
比Object.wait()
?性能方面Object.wait()
比LockSupport.park()
好嗎?
我不確定,但是想到的一點是,從文檔中不清楚LockSupport的方法是否提供同步提供的任何內存可見性保證(發生在邊和所有內容之前)。 – yshavit
另請參見問題[LockSupport/AbstractQueuedSynchronizer的實際示例](http://stackoverflow.com/questions/3311811/any-practical-example-of-locksupport-abstractqueuedsynchronizer-use)。 – Kayaman