Ale*_*ndr 5 java performance static multithreading final
我必须使用一个永远不会在方法中更改的变量,这个变量将在许多线程中经常使用.哪些变体更有效?
变式1:
public class Test {
private static int myVar;
public Test(int myVar){
this.myVar=myVar;
}
public void frequentlyUsedMultiThreadMethod(){
//read myVar
}
}
Run Code Online (Sandbox Code Playgroud)
变式2:
public class Test {
public void frequentlyUsedMultiThreadMethod(int myVar){
//read myVar
}
}
Run Code Online (Sandbox Code Playgroud)
变式3:
public class Test {
private final int myVar;
public Test(int myVar){
this.myVar=myVar;
}
public void frequentlyUsedMultiThreadMethod(){
//read myVar
}
}
Run Code Online (Sandbox Code Playgroud)
读一个单一的int,无论从哪个位置,都是如此极快,你很难构建一段代码来证明你的问题中三种方法之间有意义的时间差异,更不用说找到任意区别了一段代码.构造基准测试的问题是变量永远不会改变,因此即使frequentlyUsedMultiThreadMethod在循环中访问它,编译器也可以在每次方法调用时读取一次.
在这种情况下,最好的方法是考虑哪种方法反映了程序中数据的逻辑用法.
myVar用于不同的实例时会出错.myVar每个实例的值为1,并且它不会更改.这是您在问题中描述的最合理的方法.