首页 > 编程语言 >并发编程 1

并发编程 1

时间:2022-08-14 16:47:47浏览次数:42  
标签:编程 Thread start work stop 并发 flag 内存

并发

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

相关文章

  • 编程入门题瞎做(一)
    luoguP3295[SCOI2016]萌萌哒题目链接这里的计数没有任何的技术含量,当你知道那几个位置必须一样后,就疯狂乘\(10\)就可以了。现在问题是怎么找到那几个位置必须一样。......
  • 第7章 函数——C++的编程模块
    第7章函数——C++的编程模块7.8编程练习题第1题#include<iostream>usingnamespacestd;//编写一个程序,不断要求用户输入两个数,直到其中的一个为0.//对于两......
  • Shell编程
    变量:类型只有数字、字符串、数组,不用分号#!/bin/shstr_name="jack"#变量赋值,等号俩边不能有空格,比如str_name="jack"、str_name="jack"echo$str_nameecho${str_n......
  • C#并发编程-4 同步
    如果程序用到了并发技术,那就要特别留意这种情况:一段代码需要修改数据,同时其他代码需要访问同一个数据。这种情况就需要考虑同步地访问数据。如果下面三个条件都满足,就必......
  • C语言指针的使用运算与数组相关编程实例
    指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。本......
  • Java – 网络编程
    使用Java进行网络编程时,由虚拟机实现了底层复杂的网络协议,Java程序只需要调用Java标准库提供的接口,就可以简单高效地编写网络程序。Java提供的这些标准库存在于java......
  • 函数式编程中的 Immutable 数据结构
    原视频链接:https://www.youtube.com/watch?v=Wo0qiGPSV-sbyAnjanaVakil@JSConf概述函数式编程避免了很多命令式和面向对象的编程的问题。在函数中,数据输入,......
  • 并发编程(概念简述)
    并发编程(概念简述)1进程与线程1.1概念1.1.1线程程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要......
  • 1047 编程团体赛——20分
    编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。现给定所有队员的比赛成绩,请你编写程序找出冠军队。输......
  • Java 并发编程解析 | 如何正确理解Java领域中的多线程模型,主要用来解决什么问题?
    苍穹之边,浩瀚之挚,眰恦之美;悟心悟性,善始善终,惟善惟道!——朝槿《朝槿兮年说》写在开头我国宋代禅宗大师青原行思在《三重境界》中有这样一句话:“参禅之初,看山是山,......