chenssy
致力打造Java精品博客站点

JAVA

【死磕Java并发】—–J.U.C之AQS:阻塞和唤醒线程

chenssy阅读(337)评论(5)

此篇博客所有源码均来自JDK 1.8 在线程获取同步状态时如果获取失败,则加入CLH同步队列,通过通过自旋的方式不断获取同步状态,但是在自旋的过程中则需要判断当前线程是否需要阻塞,其主要方法在acquireQueued(): if (sho...

【死磕Java并发】—–J.U.C之AQS:同步状态的获取与释放

chenssy阅读(1181)评论(0)

此篇博客所有源码均来自JDK 1.8 在前面提到过,AQS是构建Java同步组件的基础,我们期待它能够成为实现大部分同步需求的基础。AQS的设计模式采用的模板方法模式,子类通过继承的方式,实现它的抽象方法来管理同步状态,对于子类而言它并没有...

【死磕Java并发】—–J.U.C之AQS:CLH同步队列

chenssy阅读(1603)评论(0)

此篇博客所有源码均来自JDK 1.8 在上篇博客【死磕Java并发】—–J.U.C之AQS:AQS简介中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列。 CLH同步队列是一个FIFO双向队列,AQS依赖它来完成同步状态的管...

【死磕Java并发】—–J.U.C之AQS:AQS简介

chenssy阅读(1109)评论(1)

Java的内置锁一直都是备受争议的,在JDK 1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略(【死磕Java并发】—–深入分析synchronized的实现原理),但是与Lock...

【死磕Java并发】—–Java内存模型之总结

chenssy阅读(1156)评论(0)

经过四篇博客阐述,我相信各位对Java内存模型有了最基本认识了,下面LZ就做一个比较简单的总结。 总结 JMM规定了线程的工作内存和主内存的交互关系,以及线程之间的可见性和程序的执行顺序。一方面,要为程序员提供足够强的内存可见性保证;另一方...

【死磕Java并发】—–Java内存模型之从JMM角度分析DCL

chenssy阅读(1626)评论(4)

DCL,即Double Check Lock,中卫双重检查锁定。其实DCL很多人在单例模式中用过,LZ面试人的时候也要他们写过,但是有很多人都会写错。他们为什么会写错呢?其错误根源在哪里?有什么解决方案?下面就随LZ一起来分析 问题分析 我...

【死磕Java并发】—–Java内存模型之分析volatile

chenssy阅读(5408)评论(5)

前篇博客【死磕Java并发】—–深入分析volatile的实现原理 中已经阐述了volatile的特性了: volatile可见性;对一个volatile的读,总可以看到对这个变量最终的写; volatile原子性;volatile对单个读...

【死磕Java并发】—–Java内存模型之重排序

chenssy阅读(1277)评论(2)

在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 在单线程环境下不能改变程序运行的结果; 存在数据依赖关系的不允许重排序 如果看过LZ上篇博客的就会知...

【死磕Java并发】—–Java内存模型之happens-before

chenssy阅读(1339)评论(3)

在上篇博客(【死磕Java并发】—–深入分析volatile的实现原理)LZ提到过由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题。那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见? ...

Chenssy's Blog | 致力打造个人精品博客

联系作者读书系统