并发
jmm
java 内存模型,这个东西目前先不跟jvm模型对应起来。
存在一个工作内存、驻内存的概念
线程间通信
-
cas
原子性 有序性 可见性
结合一个两个线程之间交互的例子
public class Start {
private boolean flag = true;
private void work() {
int count = 0;
System.out.println("start work");
while (flag) {
count++;
}
System.out.println("work stop " + count);
}
private void stop() {
flag = false;
System.out.println("work should stop");
}
public static void main(String[] args) throws InterruptedException {
Start start = new Start();
Thread work = new Thread(() -> start.work());
Thread stopWork = new Thread(() -> start.stop());
work.start();
Thread.sleep(1000);
stopWork.start();
}
}
为什么这里另一个线程把flag整成false,反而没有停止。
内存屏障?
清除工作内存中的值
-
Thread.yield()
会释放时间片,再次获取时间片的时候,加载上下文的时候,会从主内存中把最新的值取出来
-
内存屏障
这个就是保证了变量的可见性,是利用jvm的内存屏障来做的
保证对目标的修改立即刷回主存,并使其他工作内存中的副本立即失效
-
volitile关键字
-
sync关键字
以上这些到底层就是基于内存屏障来做的。
-
标签:编程,Thread,start,work,stop,并发,flag,内存 From: https://www.cnblogs.com/guoweishi/p/16585710.html