java - 如何实现自旋锁以避免阻塞

标签 java multithreading thread-synchronization spinlock

考虑以下代码:

// 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/

相关文章:

java - 安卓工作室 : Imageview background blurs on larger minimum size than image

Java文本后面的竖线?就像编辑器中指示页面结束位置的行一样

java - 线程是否足够可靠以计算秒数?

wpf - 使用 BackgroundWorker 更新 GUI

c# - 来自具有特定延迟的线程的方法调用

java - 分割扫描仪字符串

需要 Java GroupLayout 验证设计和对齐帮助

c# - 使用 C# 和线程删除大量文件和子文件夹

java - 多个线程在java中使用同一个对象是否复制它?

apache-camel - Akka 本身支持集成模式吗?