java - 同步方法与 block 的性能

标签 java performance synchronized

我有一个类,其中所有方法都需要同步(没有静态方法)。其中一个方法将每 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/

相关文章:

java - 在泛型类中嵌套泛型

windows - Eclipse 3.5 64 位性能 Windows 7

javascript - 为了避免 "script is running too long"对话框,我应该拆分我的函数并定期运行它吗?

java - 两类同步

Java 扫描器有NextLine NoSuchElementException?

Java MVC - 感觉我不明白

java - 使用 Jackson 将 JSON 多个对象转换为单个 JSON

python - 用于 Python 的 HDF5 : high level vs low level interfaces. h5py

java - Java并发同步问题

java - 为什么在这种情况下不会发生死锁