
java多线程
文章平均质量分 84
幻想波普星
这个作者很懒,什么都没留下…
展开
-
一文带你彻底搞懂ThreadLocal
前言共享变量一直是并发中的老大难问题,每个线程都对它有操作权,所以线程之间的同步很关键,锁也就应运而生。这里换一个思路,是否可以把共享变量私有化?即每个线程都拥有一份共享变量的本地副本,每个线程对应一个副本,同时对共享变量的操作也改为对属于自己的副本的操作,这样每个线程处理自己的本地变量,形成数据隔离。事实上这就是ThreadLocal了。就线程同步而言,锁可以认为是时间换空间,ThreadL...原创 2019-12-26 20:54:53 · 398 阅读 · 0 评论 -
深扒AQS(四)之ReentrantReadWriteLock
前言上一节我们说了ReentrantLock,这个锁可以很好的保证线程安全,接下来我们考虑对这个锁的优化,实际上很多业务场景都是读多写少的场景,ReentrantLock是个独占锁,所以不能很好的应对并发的读请求,ReentrantReadWriteLock应运而生,可以分离读锁和写锁,其中读锁是共享锁,写锁是独占锁,提高并发性能。基本介绍属性public class ReentrantR...原创 2019-11-03 18:00:21 · 207 阅读 · 0 评论 -
深扒AQS(三)之ReentrantLock
前言前边两节我们分别讲了AQS的阻塞队列和条件队列,算是对AQS有了一个基本的了解,这一节中,来看一哈AQS在JUC中的一些锁上的应用ReentrantLock可重入锁,顾名思义,获得这个锁的线程还可以再次获得,与此对应的,放弃这个锁的次数必须跟获得次数对应,不然就不算彻底放弃。Synchronized也是可重入锁。public class ReentrantLock implements...原创 2019-11-02 20:34:46 · 191 阅读 · 0 评论 -
深扒AQS(二)之condition
概述我们在第一节中AQS的属性那里说过AQS类中还有一个ConditionObject的内部类public class ConditionObject implements Condition, java.io.Serializable { // 条件队列首节点 private transient Node firstWaiter; // 条件...原创 2019-11-01 20:11:30 · 2918 阅读 · 4 评论 -
深扒AQS(一)之独占共享解析
AQS可以说是并发中最关键的一环了,包括我们前边用过了无数次的ReentrantLock以及各种锁就是AQS的典型应用。AQS全名为AbstractQueuedSynchronizer,抽象同步队列AQS属性private transient volatile Node head;private transient volatile Node tail; private vol...原创 2019-11-01 20:09:27 · 642 阅读 · 0 评论 -
小探CopyOnWriteArrayList
前边jdk源码系列中提到了hashmap和ArrayList都不是线程安全的容器,那么接下来,在本文中就来看一下jdk是怎么实现支持并发线程安全的容器吧并发List之CopyOnWriteArrayList顾名思义,写时复制的一个list,既然说是list,底层不用说肯定是数组了。来看下吧属性public class CopyOnWriteArrayList<E> im...原创 2019-10-29 14:27:44 · 135 阅读 · 0 评论 -
深度解析并发阻塞队列
上篇博客中我们说到了线程池中的workQueue,任务队列private final BlockingQueue<Runnable> workQueue;可以看到是BlockingQueue类型,BlockingQueue是个接口,我们实际上用到的并发队列是BlockingQueue的各种实现。我们就挨个儿来一探究竟吧BlockingQueuepublic interface...原创 2019-10-28 18:01:28 · 262 阅读 · 0 评论 -
深度剖析线程池
之前在网上看一些面试题,每每看到线程池相关的都有种心虚的感觉,总感觉似懂非懂,禁不起敲打,也罢,好好写篇文章学习下线程池就。类的结构ExecutorService是我们常用的接口,继承了Ececutor,在Executor的基础上添加了很多功能。ThreadPoolExecutor就是我们线程池的核心类了,可以用它的构造方法实现多种不同的线程池。还有一种线程池ScheduledThre...原创 2019-10-27 21:58:00 · 195 阅读 · 0 评论 -
深入理解volatile
前言上篇文章说过,在双重检查的单例模式中,如果不用volatile,可能会导致重排序,进而产生一个空的单例。而volatile可以有效避免重排序,接着来探究下这一实现的原理吧happens before可以认为hasppens before是JMM为java程序员设定的程序执行前后顺序的规则,注意,只是程序员可以这么去看程序的执行顺序,即语义上的happens before,实际上底层执行可...原创 2019-10-26 17:11:07 · 217 阅读 · 0 评论 -
单例模式线程安全问题引发的思考
前言说到面试,肯定少不了并发编程、多线程这些啦,这部分相对来说有一定的难度,而且学了就忘,让人头大,因此我打算好好捋一捋这部分,还是那句话,99%的东西是不需要智力的,惟手熟尔,多看几遍写几遍就好啦。概述首先需要理解多线程编程的一些由来。其实无非就是改善单线程的速度,一定能改善吗?也不尽然,在单核机器上,如果当前线程一直阻塞在IO,那么此时多线程肯定是有必要的,不然一直等着他IO也不是个事儿...原创 2019-10-25 16:24:20 · 271 阅读 · 0 评论 -
java中断详细介绍及其对各种线程状态的影响分析
最近在复盘java并发的知识,借这篇文章总结下java的线程状态以及各状态下的中断影响。中断简介首先来看几个常用的中断Api,在此之前我们先来看一个本地方法private native boolean isInterrupted(boolean ClearInterrupted);这个本地方法是我们接下来要说的Api的底层关键实现,返回该线程中断标志位是否被标记。该方法中的参数Clear...原创 2019-10-24 16:30:35 · 295 阅读 · 0 评论 -
juc之基本概念详解分析
基本概念中断boolean interrupted() 返回当前调用线程,不是调用该方法的实例对象是否中断,若是中断,清除中断标志位boolean isinterrupted() 返回调用线程是否中断**,若是中断,恢复中断标志位**void interupt() 将调用线程中断标志为truepublic static boolean interrupted() { ...原创 2019-09-08 20:41:48 · 622 阅读 · 0 评论