Mutexes在许多编程语言中都很常见,例如C/C++。我想念他们在 Java 中的表现。但是,我可以通过多种方式编写自己的 class Mutex
:
什么是最快(最佳运行时)方式?我认为同步是最常见的,但性能呢?
最佳答案
Mutexes are pretty common in many programming languages, like e.g. C/C++. I miss them in Java.
不确定我是否关注您(特别是因为您在问题中给出了答案)。
public class SomeClass {
private final Object mutex = new Object();
public void someMethodThatNeedsAMutex() {
synchronized(mutex) {
//here you hold the mutex
}
}
}
或者,您可以简单地使整个方法同步,这相当于使用 this
作为互斥对象:
public class SomeClass {
public synchronized void someMethodThatNeedsAMutex() {
//here you hold the mutex
}
}
What is the fastest (best runtime) way?
获取/释放监视器本身不会是一个重大的性能问题(您可以阅读 this blog post 以查看对影响的分析)。但是,如果您有许多线程争夺锁,则会造成争用并降低性能。
在这种情况下,最好的策略是如果您主要读取数据(正如 Marko 在评论中指出的那样,无锁使用 CAS 操作,这可能涉及重试如果你有很多写线程,会写很多次,最终导致性能变差)或者更好,避免在线程之间共享太多东西。
关于java - Java 编写互斥锁的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14337296/