测试以验证原始局部变量是否是线程安全的[关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试以验证原始局部变量是否是线程安全的[关闭]相关的知识,希望对你有一定的参考价值。
我写了下面的代码来增加版本数
if ("Solution".equalsIgnoreCase(modelName)) {
mainsolution.setSolutionVersion(oldsolution.getSolutionVersion() + 1);}
我怀疑上面的代码在多线程环境中可能无法给出正确的结果,因此请在我编写的下面的测试代码中对其进行测试
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Test {
public static void main(String[] args) {
ExecutorService service = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
service.execute(new NotThreadsafe());
}
ExecutorService service1 = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
service1.execute(new Threadsafe());
}
}
}
class NotThreadsafe implements Runnable{
int x = 1;
public int incrementX() {
x++;
return x;
}
@Override
public void run() {
System.out.println("not safe:"+incrementX());
}
}
class Threadsafe implements Runnable{
public int getTwoTimesTwo() {
int x = 1;
x++;
return x;
}
@Override
public void run() {
System.out.println("safe:"+getTwoTimesTwo());
}
}
但是我得到2作为Threadsafe和NotThreadsafe的输出。
我写这篇文章来测试上面的帖子是错的。
答案
与其他线程共享本地变量的唯一方法是,如果您在匿名类中引用它。以上是关于测试以验证原始局部变量是否是线程安全的[关闭]的主要内容,如果未能解决你的问题,请参考以下文章