【发布时间】:2017-01-17 20:15:51
【问题描述】:
目前我正在学习 Java 中的并发编程。我注意到Java 1.6中引入的LockSupport.park()比Object.wait()更容易使用,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 的方法是否提供同步提供的任何内存可见性保证(发生在边缘之前以及所有)。
标签: java multithreading locking wait