小编Mar*_*c G的帖子

在Java中赋值给变量的可见性

我最近和一位朋友就这样的代码争论过:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
 * See memory consistency effects in a Java Executor.
 */
public class PrivateFieldInEnclosing {
    private long value;
    PrivateFieldInEnclosing() {}
    void execute() {
        value = initializeValue();
        ExecutorService executor = Executors.newCachedThreadPool();
        executor.submit(new Y());
    }

    class Y implements Runnable {
        @Override
        public void run() {
            System.out.println(value);
        }
    }

    private long initializeValue() {
        return 20;
    }

    public static void main(String[] args) {
        new PrivateFieldInEnclosing().execute();
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为,这是可能的,value可以为可见0Y,因为有不能保证分配value = initializeValue()是在执行程序的线程是可见的.我说他需要做value …

java concurrency multithreading

8
推荐指数
1
解决办法
138
查看次数

标签 统计

concurrency ×1

java ×1

multithreading ×1