
Java并发
文章平均质量分 93
Chen_jay_
阳光帅气
展开
-
JAVA并发机制的底层实现原理
1.volatile的应用volatile是轻量级的synchronized,它只是用来保证共享变量的可见性,不能保证操纵的原子性。【引申】–>volatile如何实现内存可见性?深入的说,通过加入内存屏障和禁止重排序优化实现的。对volatile变量执行写操作时,会在写操作后加入一条store屏障指令。对volatile变量执行读操作时,会在读操作前加入一条load屏障指令。1.1—vol...原创 2018-04-01 12:53:14 · 139 阅读 · 0 评论 -
Java内存模型--(一)Java内存模型的基础
并发编程模型的两个关键问题 在并发编程领域,需要处理两个关键问题:线程之间如何通信及线程之间如何同步。 线程之间的通信 线程的通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信,典型的共享内存通信方式就是通过共享对象进行通信。在消息传递的并发...原创 2018-04-01 13:11:36 · 253 阅读 · 0 评论 -
Java内存模型--(二)重排序
重排序重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分为下列3种类型,如表所示。名称代码实例说明写后读a = 1;b = a;写一个变量之后,再读这个变量写后写a = 1;a = 2;写一个变量之后,再写这个变量读后写a = b;b = 1;读一个变量之后,...原创 2018-04-01 13:43:12 · 174 阅读 · 0 评论 -
Java内存模型--(三)顺序一致性
顺序一致性内存模型是一个理论参考模型,在设计的时候,处理器的内存模型和编程语言的内存模型都会以顺序一致性内存模型作为参照。 数据竞争与顺序一致性当程序未正确同步时,就可能会存在数据竞争。Java内存模型规范对数据竞争的定义如下。 在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序。 当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章...原创 2018-04-02 17:37:19 · 161 阅读 · 0 评论 -
Java内存模型--(四)volatile的内存语义
当声明共享变量为volatile后,对这个变量的读/写将会很特别。为了揭开volatile的神秘面纱,下面将介绍volatile的内存语义及volatile内存语义的实现。volatile的特性理解volatile特性的一个好方法是把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。下面通过具体的示例来说明,示例代码如下。class VolatileFeature...原创 2018-04-03 16:55:22 · 153 阅读 · 0 评论 -
Java内存模型--(五)锁的内存语义
锁的释放-获取建立的happens-before关系 锁是Java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。 下面是锁释放-获取的示例代码。class MonitorExample { int a = 0; public synchronized void writer() { // 1 a++; //...原创 2018-04-06 16:55:18 · 198 阅读 · 0 评论 -
深入理解Java之线程池
我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解一下Ja...原创 2018-11-26 16:59:39 · 263 阅读 · 0 评论