①volatile关键字:保证线程之间的变量的可见性 例如: 打印结果如下:线程感受不到isRunning变量的变化(即对主线程的变量改变不可见)一直在while循环中,不会停止 将代码修改如下:将isRunning属性用volatile修饰 打印结果如下: ②volatile关键字并不能保证原子性 ...
分类:
其他好文 时间:
2017-09-29 14:56:20
阅读次数:
143
Immutable Object设计模式适用场景:1.被建模对象的状态变化不频繁:设置一个专门的线程用于被建模对象状态发生变化时创建新的不可变对象。而其他线程只是读取不可变对象的状态。此场景下一个小技巧就是Manipulator对不可变对象的引用使用volatile关键字进行修饰,既可以避免使用显示 ...
分类:
编程语言 时间:
2017-09-29 14:01:26
阅读次数:
277
// 8:15 AM/09/28/2017 #pragma once #include // std::cout #include // std::thread #include // std::mutex #include using namespace std; volatile int cou... ...
分类:
其他好文 时间:
2017-09-28 11:42:19
阅读次数:
229
一、ThreadPoolExecutor理解 1、参数变量 1.1、runState 在ThreadPoolExecutor中定义了一个volatile变量,另外定义了几个static final变量表示线程池的各个状态: volatile int runState; static final in ...
分类:
其他好文 时间:
2017-09-28 00:30:54
阅读次数:
263
原文出处: 海子 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件 ...
分类:
编程语言 时间:
2017-09-26 17:52:21
阅读次数:
184
原文出处: 海子 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件 ...
分类:
编程语言 时间:
2017-09-26 16:04:05
阅读次数:
235
volatile特性 内存可见性:通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。 volatile的使用场景 通过关键字sychronize可以防止多个线程进入同一段代码,在某些特定场景中,volatile相当于一个 ...
分类:
编程语言 时间:
2017-09-24 15:25:03
阅读次数:
255
一.内存模型的相关概念 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起 ...
分类:
编程语言 时间:
2017-09-24 09:56:37
阅读次数:
191
前言 HashMap非线程安全的,HashTable是线程安全的,所有涉及到多线程操作的都加上了synchronized关键字来锁住整个table,这就意味着所有的线程都在竞争一把锁,在多线程的环境下,它是安全的,但是无疑效率低下的。 ConcurrentHashMap(JDK1.7) 在JDK1. ...
分类:
编程语言 时间:
2017-09-23 12:16:44
阅读次数:
199
ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量。 这个玩意有什么用处,或者说为什么要有这么一个东东?先解释一下,在并发编程的时候,成员变量如果不做任何处理其实是线程不安全的,各个线程都在操作同一个变量,显然是不行的,并且我们也知道volatile这个关键字也是不能保证线程安全的。 ...
分类:
编程语言 时间:
2017-09-22 11:48:11
阅读次数:
164