测试以验证原始局部变量是否是线程安全的[关闭]

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的输出。

我写这篇文章来测试上面的帖子是错的。

答案
与其他线程共享本地变量的唯一方法是,如果您在匿名类中引用它。

以上是关于测试以验证原始局部变量是否是线程安全的[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

方法中定义的局部变量是否为线程安全的?

java线程安全问题之静态变量实例变量局部变量

java线程安全问题之静态变量实例变量局部变量

java线程安全问题之静态变量实例变量局部变量

java线程安全问题之静态变量实例变量局部变量

11-为什么局部变量是线程安全的?