- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前我正在学习 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
block 消失了。
我的问题是,我是否应该总是更喜欢 LockSupport.park()
而不是 Object.wait()
? Object.wait()
在性能方面是否优于 LockSupport.park()
?
最佳答案
wait/notify 背后的想法是通知不是线程特定的,通知者不必知道需要通知的特定线程,它只是告诉锁(或条件,对于 ReentrantLock)它正在通知,以及它们之间的锁和 OS 调度器决定谁得到通知。
我希望大多数时候通知程序不想知道哪个线程需要取消停放,所以对于这些情况,等待/通知将是更好的选择。使用停放/取消停放,您的代码必须知道更多,并且失败的机会也会更多。您可能认为 synchronized block 很乏味,但真正乏味的是整理出某些东西在应该有的时候没有被 unpark 的情况。
请注意,在您的第二个示例中,您的条件需要是易变的或原子的,或者其更新跨线程可见的其他内容。
关于java - `LockSupport.park()` 可以替换 `Object.wait()` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39415636/
我用过基本 object.wait() , object.notify() , object.notifyAll()在多线程编程中。 我知道我们有包裹 java.util.concurrent它有 j
LockSupport介绍 学过wait/notify 应该都有觉得这个不太好用,因为不能唤醒自己想要的线程,只能随机唤醒一个线程或者全部线程都唤醒,处理不当甚至导致永久的阻塞情况,现在有了LockS
我正在尝试断言使用 LockSupport.park(Object blocker) 是否会释放 blocker 的监视器锁定对象。即:如果在blocker同步的section中调用,blocker的
我们知道,当我们调用 LockSupport.park() 时,线程 A 将处于 WAITTING 状态,等待另一个线程调用 LockSupport.unpark()。那么当我们调用它的时候,线程A会
大佬们,谁能给个LockSupport & AbstractQueuedSynchronizer的简单实用例子? javadocs 中给出的示例很紧张。 我理解 Semaphore 许可的使用。 感谢
我在 Windows 10 64 位和 8 GB RAM 上使用 JDK 1.8。我有一个 Swing 应用程序。在应用程序中,我查询 DB2 数据库。该查询返回数据库表名称和每个表的查询条件的列表。
我们可以调用LockSupport.park(Object blocker)来暂停当前线程。但是参数“blocker”有什么用呢? 最佳答案 来自文档: The three forms of park
在某些情况下,我们大多数人都会这样写: try { Thread.sleep(2000); } catch (InterruptedException e) { ; // do nothi
目前我正在学习 Java 并发编程。我注意到 Java 1.6 中引入的 LockSupport.park() 比 Object.wait() 更容易使用,Object.wait()< 的典型用法就像
本质上,我需要一种方法来启动亚微秒线程 hibernate ,如 parknanos Thread.Sleep 似乎只精确到毫秒。 最佳答案 尝试 Thread.SpinWait 关于java - J
我需要在 Win7 x64 上实现与此功能相同的功能。 我最初使用 SwitchToThread() 但这不起作用,因为它在极端条件下会导致死锁。我能找到的唯一选择是 Sleep() 但这很可能是一个
我是一名优秀的程序员,十分优秀!