并发编程(多线程)-可见性问题

可见性

可见性概念

可见性(Visibility):是指一个线程对共享变量进行修改,另一个先立即得到修改后的最新值

可见性演示

案例演示:一个线程根据boolean类型的标记flag,while循环,另一个线程改变这个flag变量的值,另一个线程并不会停止循环

/**
 * 案例演示:
 * 一个线程对共享变量的修改,另一个线程不能立即得到最新值
 */
public class Test01Visibility {
    // 多个线程都会访问的数据,我们称为线程的共享数据
    private static boolean run = true;

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            while (run) {
            }
        });
        t1.start();
        Thread.sleep(1000);
        Thread t2 = new Thread(() -> {
            run = false;
            System.out.println("时间到,线程2设置为false");
        });
        t2.start();
    }
}

小结

并发编程时,会出现可见性问题,当一个线程对共享变量进行了修改,另外的线程并没有立即看修改后的最新值

你可能感兴趣的:(学习,java,开发语言)