Joh*_*nes 5 java performance multithreading mutex
互斥体在许多编程语言中很常见,例如C/C++.我想念他们用Java.但是,我可以通过多种方式编写自己的方法class Mutex:
什么是最快(最好的运行时)方式?我认为同步是最常见的,但性能呢?
ass*_*ias 15
互斥体在许多编程语言中很常见,例如C/C++.我想念他们用Java.
不确定我是否跟着你(特别是因为你在问题中给出答案).
public class SomeClass {
private final Object mutex = new Object();
public void someMethodThatNeedsAMutex() {
synchronized(mutex) {
//here you hold the mutex
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以简单地使整个方法同步,这相当于this用作互斥对象:
public class SomeClass {
public synchronized void someMethodThatNeedsAMutex() {
//here you hold the mutex
}
}
Run Code Online (Sandbox Code Playgroud)
什么是最快(最好的运行时)方式?
获取/发布监视器本身不会成为重要的性能问题(您可以阅读此博客文章以查看对影响的分析).但是如果你有许多线程争夺锁定,它将产生争用并降低性能.
在这种情况下,最好的策略是如果你主要是在阅读数据时不使用"无锁"算法来使用互斥锁(正如Marko在评论中指出的那样,无锁使用CAS操作,这可能涉及多次重试写入如果你有很多写线程,最终导致更差的性能)甚至更好,避免在线程之间共享太多东西.
情况正好相反:Java设计师很好地解决了它,你甚至都不认识它:你不需要一流的Mutex对象,只需要synchronized修饰符.
如果你有一个特殊的情况,你想以非嵌套的方式兼顾你的互斥体,那么总会有ReentrantLock并且java.util.concurrent提供丰富的同步工具,远远超出原始的互斥体.
| 归档时间: |
|
| 查看次数: |
24592 次 |
| 最近记录: |