考虑以下代码:
// Below block executed by thread t1
synchronized(obj) {
obj.wait(0);
}
// This block executed by thread t2
synchronized(obj) {
obj.notify();
}
据我了解,在上面的代码中,如果t1
已获取同步块(synchronized block)的所有权,同时如果线程t2
尝试获取同步块(synchronized block),则t2
进行内核等待。
我想避免这种情况,并在 block 之前旋转 t2
,直到 t1
调用 wait 并离开该 block 的所有权。这可能吗?
最佳答案
JVM 不需要将锁定同步块(synchronized block)的条目实现为硬 block 和上下文切换。 It has the option of using lighter weight methods, such as spin locks 。事实上,Oracle JVM 会访问 some lengths以避免阻塞。所以你可能会发现JVM已经帮你做了这个优化。如果没有,那可能是因为 JVM 有证据表明自旋锁不是一个好主意。
关于java - 如何实现自旋锁以避免阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26709471/