thread的join方法是运行该方法的线程必须等到join方法的线程运行完毕才能让当前线程继续运行。原理是校验join线程是否存活,存活就一直循环等待,直到线程over了,才继续向下运行。volitile 是让线程间进行通讯的,解决了编译器的重排序,是程序按照正常的执行流程运行, jstat 命令 ...
分类:
编程语言 时间:
2019-06-30 22:03:41
阅读次数:
174
Java 多线程 volitile 和 atomic 关键字 尝试运行以上代码,发现thread永远也无法发现key0的x被改变 所以这个时候需要加上volitile关键字 具体原因是java中每个线程都有工作内存,以及主存 我的理解就是不加volitile,线程读写变量是先在自己的工作内存中处理, ...
分类:
编程语言 时间:
2019-04-05 20:07:59
阅读次数:
200
标题格 1、线程的五种状态 2、volitile的理解1、线程的五种状态 1)、新建 当new创建一个线程,例如new thread(r),线程还没开始运行,处于新建状态。 2)、就绪 新建的新线程并不会自动运行,要执行需要调用start()方法创建线程运行的系统资源,返回后,此时线程就处于就绪状态 ...
分类:
编程语言 时间:
2018-12-18 11:00:10
阅读次数:
144
volitile和synchronize volitile可以保证可见性,不能保证原子性,禁止重排序 synchronize:既然可以保证可见性又能 保证原子性 重排序: cpu对代码实现优化,不会对有依赖关系的做重排序(多线程情况下) 多线程情况下是没有影响的 数据依赖性 如果两个操作访问同一个变 ...
分类:
编程语言 时间:
2018-10-22 20:30:25
阅读次数:
198
Java volitile关键字 Java volatile 关键字用来标记一个Java变量为“存储于主内存”。更准确地说是,每一次针对volatile变量的读操作将会从主内存读取而不是从CPU的缓存读取;每一次针对volatile变量的写操作都会写入主内存,而不仅仅是写入CPU缓存。 实际上,从J ...
分类:
编程语言 时间:
2018-08-03 16:22:15
阅读次数:
162
package com.fh.interview; /** * volitile关键字学习 * * * 缓存一致性协议 * 每个处理器通过嗅探在总线上传播的数据来检查自己缓存的值是不是过期 * * * 1、Lock前缀的指令会引起处理器缓存写回内存; 2、一个处理器的缓存回写到内存会导致其他处理器的 ...
分类:
其他好文 时间:
2018-05-29 00:29:31
阅读次数:
197
1.volatile关键字的两层语义 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2)禁止进行指令重排序。 先看一段代码,假如线 ...
分类:
其他好文 时间:
2018-01-12 11:29:30
阅读次数:
303
lock基本思路: volitile + CAS +Queue(存放线程) 实现了: 1 可见性(volitile 和 happenedBefor原则共同实现) 与 2 原子性(CAS ,CPU 指令实现) 共享锁和排它锁(ReentrantReadWriteLock): 共享锁与排他锁 共用一个线 ...
分类:
其他好文 时间:
2017-10-17 19:03:23
阅读次数:
135
前言:
用在多线程,同步变量。线程为了提高效率,将某个成员(A)变量拷贝了一份(B),线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步。因此存在A和B不
一致的情况。volatile就是用来避免这个中情况的。volatile告诉jvm,它所修饰的变量不保留拷贝,直接访问主内存中的A。在Java内存模型中,有main memory,每个线程也
有自己的memory(寄存器).为...
分类:
编程语言 时间:
2015-07-22 23:00:30
阅读次数:
194
const:1、如果把const放在变量类型前,说明这个变量的值是保持不变的(即为常量),改变量必须在定义时初始化,初始化后对她的任何赋值都是非法的。2、当指针或是引用指向一个常量时,必须在类型名前使用const标示这个指针或是引用指向的“变量”为常量,没有的话就是语法错误。3、假如变量是一个非常量...
分类:
其他好文 时间:
2015-03-05 16:20:24
阅读次数:
122