我有一个类,其中所有方法都需要同步(没有静态方法)。其中一个方法将每 50 毫秒调用一次。
我想知道将 synchronized 关键字放在哪里才能获得最短的执行时间?
即关于执行时间,下面详述的 2 个选项之间是否有任何差异?
选项 1(同步方法)
public class MyNativeObject{
private boolean released = false;
public synchronized String read(){
if(released) return null;
return Read();
}
public synchronized void release(){
if(released) return;
released = true;
Release();
}
private native String Read();
private native void Release();
}
选项 2(同步块(synchronized block))
public class MyNativeObject{
private Boolean released = false;
public String read(){
synchronized(released){
if(released) return null;
return Read();
}
}
public void release(){
synchronized(released){
if(released) return;
released = true;
Release();
}
}
private native String Read();
private native void Release();
}
最佳答案
你不能有一个同步类。
正如 Joachim 指出的那样,选项 2 是错误的,因为您锁定的是 a) 一个变化的字段和 b) 一个全局对象。
同步方法不仅是唯一有效的方法,而且是最简单的方法,所以我会使用它。
一个典型的锁大约需要 50 纳秒,所以如果您每 50,000,000 纳秒调用一次这些方法,它不太可能产生任何影响。
public class MyNativeObject{
private boolean released = false;
public synchronized String read(){
return released ? null : Read();
}
public synchronized void release(){
if(released) return;
released = true;
Release();
}
// make the native methods static if you can.
private static native String Read();
private static native void Release();
}
关于java - 同步方法与 block 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16399796/