java多线程之volatile关键字】的更多相关文章

关键字volatile的主要作用是使变量在多个线程间可见. 1.关键字volatile与死循环 如果不是在多继承的情况下,使用继承Thread类和实现Runnable接口在取得程序运行的结果上并没有什么太大的区别.如果一旦出现“多继承”的情况,则用实现Runnable接口的方式来处理多线程的问题就是很有必要的. 下面我们用实现Runnable接口的的方式来理解多线程的使用,也看实验volatile关键字在并发情况下的一些特性. 1.1创建一个PrintString类: package edu.y…
public class ThreadVolatile extends Thread { public boolean flag=true; @Override public void run() { System.out.println("子线程begin......"); while(flag){} System.out.println("子线程end....."); } public void setFlag(boolean flag){ this.flag=…
一,volatile关键字的可见性 要想理解volatile关键字,得先了解下JAVA的内存模型,Java内存模型的抽象示意图如下: 从图中可以看出: ①每个线程都有一个自己的本地内存空间--线程栈空间???线程执行时,先把变量从主内存读取到线程自己的本地内存空间,然后再对该变量进行操作 ②对该变量操作完后,在某个时间再把变量刷新回主内存 关于JAVA内存模型,更详细的可参考: 深入理解Java内存模型(一)——基础 因此,就存在内存可见性问题,看一个示例程序:(摘自书上) public cla…
一内存模型的相关概念 二并发编程中的三个概念 三Java内存模型 四深入剖析volatile关键字 五使用volatile关键字的场景 volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以重获生机. volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情.由于volatile关键字是与Java的内存模型有关的,因此在讲述vo…
本文目录 从多线程交替打印A和B开始 Java 内存模型中的可见性.原子性和有序性 Volatile原理 volatile的特性 volatile happens-before规则 volatile 内存语义 volatile 内存语义的实现 CPU对于Volatile的支持 缓存一致性协议 工作内存(本地内存)并不存在 总结 -参考资料 从多线程交替打印A和B开始 面试中经常会有一道多线程交替打印A和B的问题,可以通过使用Lock和一个共享变量来完成这一操作,代码如下,其中使用num来决定当前…
摘录 1. 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入.由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度.因此在CPU里面就有了高速缓存.也就是,当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行…
大概是因为项目.业务的原因,工作上几乎还没有使用过多线程相关的功能,相关知识差不多都忘了,所以最近补一下基础. volatile用来修饰共享变量,volatile变量具有 synchronized 的可见性特性,但是不具备原子特性.volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值.当成员变量发生变化时,强迫线程将变化值回写到共享内存.以保证在同一时刻,不同的线程看到该成员变量的值是一致的. 因为volatile关键字与Java的内存模型有关,所以先看一下Ja…
开始全文之前,先铺垫一下jvm基础知识以及线程栈: JVM栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean.char.byte.short.int.long.float.double).部分的返回结果以及Stack Frame,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址.       接下来说说volatile: 用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最…
一,介绍 本文介绍JAVA多线程中的synchronized关键字作为对象锁的一些知识点. 所谓对象锁,就是就是synchronized 给某个对象 加锁.关于 对象锁 可参考:这篇文章 二,分析 synchronized可以修饰实例方法,如下形式: 1 public class MyObject { 2 3 synchronized public void methodA() { 4 //do something.... 5 } 这里,synchronized 关键字锁住的是当前对象.这也是称…
volatile的介绍 volatile的主要作用是:提示编译器该对象的值有可能在编译器未监测的情况下被改变. volatile类似于大家所熟知的const也是一个类型修饰符.volatile是给编译器的指示来说明对它所修饰的对象不应该执行优化.volatile的作用就是用来进行多线程编程.在单线程中那就是只能起到限制编译器优化的作用.所以单线程的童鞋们就不用浪费精力看下面的了. volatile让变量每次在使用的时候,都从主存中取.而不是从各个线程的“工作内存”. volatile具有sync…