同一个线程池,不使用volatile,某些任务修改一个共享变量,某些任务读取共享变量,变量的可见性能保证吗?

下面是我的测试代码,无法测试到不可见的情况,是根本不存在还是太短抓不到


public class TestClass {
    public int num = 0;
}
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

public class Main {
    private static final AtomicInteger threadNumber = new AtomicInteger(1);
    static  Executor executor = new ThreadPoolExecutor(100, 100, 300, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(),
            new ThreadFactory() {
                @Override
                public Thread newThread(Runnable r) {
                    Thread thread = new Thread(r);
                    thread.setName("test" + threadNumber.getAndAdd(1));
                    return thread;
                }
            });

    public static void main(String[] args) {
        TestClass testClass = new TestClass();
        executor.execute(new Runnable() {
            @Override
            public void run() {
                testClass.num = 10;
                
            }
        });
        for(int i = 1;i<1000000000000L;i++)
        executor.execute(new Runnable() {
            @Override
            public void run() {
                if(testClass.num != 10) {
                    System.out.println(testClass.num);
                }
            }
        });
    }
}
阅读 2.2k
4 个回答

需要加锁才成。

TransmittableThreadLocal

TransmittableThreadLocal 阿里的组件正解

你这段代码里面, 没看到多线程 写呀. 只有一个线程赋值, 别的只是读而已.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题