
Java并发(J.U.C)
文章平均质量分 96
Java并发这个专栏是笔者在回顾Java的学习实践中,发掘自己在写了Java面试专栏之后,对于Java并发的总结 许多部分还不够细致和深入,所以又总结一个专栏对于一些比较重要的内容进行概括总结。
提灯寻梦在南国
这个作者很懒,什么都没留下…
展开
-
一文了解ThreadLocal
1. ThreadLocal的简介在多线程编程中通常解决线程安全的问题我们会利用synchronzed或者lock控制线程对临界区资源的同步顺序从而解决线程安全的问题,但是这种加锁的方式会让未获取到锁的线程进行阻塞等待,很显然这种方式的时间效率并不是很好。线程安全问题的核心在于多个线程会对同一个临界区共享资源进行操作,那么,如果每个线程都使用自己的“共享资源”,各自使用各自的,又互相不影响到彼此...原创 2020-03-09 22:58:33 · 397 阅读 · 0 评论 -
了解Java并发的工具类——计数器CountDownLatch和CyclicBarrier,信号量Semaphore,线程间交换数据Exchanger
1. 倒计时器CountDownLatch在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join方法,让主线程等待被join的线程执行完之后,主线程才能继续往下执行。当然,使用线程间消息通信机制也可以完成。其实,java并发工具类中为我们提供了类似“倒计时”这样的工具类,可以十分方便的完成所说的...原创 2020-01-26 16:50:10 · 340 阅读 · 0 评论 -
深入剖析Java线程池——ThreadPoolExecutor与ScheduledThreadPoolExecutor
前言这篇文章主要是针对线程池章的一些内容进行补充和中哟啊源代码的解析,关于线程池的一些基础知识我在Java面试07——并发知识点汇总及源码解析已经做了一些总结,所以一些基础的知识点南国在这里有的就不在讲述了。深入剖析系列属于对并发知识的一些地方的详细剖析,所以这里更加侧重于一到两个知识点的详细剖析。这篇博客的总结参考:深入理解Java线程池:ThreadPoolExecutor线程池之Sc...转载 2020-01-07 15:06:55 · 1489 阅读 · 0 评论 -
一文聊聊ConcurrentHashMap
1.ConcurrentHashmap简介在使用HashMap时在多线程情况下扩容会出现CPU接近100%的情况,因为hashmap并不是线程安全的,通常我们可以使用在java体系中古老的hashtable类,该类基本上所有的方法都采用synchronized进行线程安全的控制,可想而知,在高并发的情况下,每次只有一个线程能够获取对象监视器锁,这样的并发性能的确不令人满意。另外一种方式通过Col...转载 2020-01-04 17:25:35 · 174 阅读 · 0 评论 -
深入理解读写锁ReentrantReadWriteLock和并发容器CopyOnWriteArrayList
参考文章:ReentrantReadWriteLock1.读写锁的介绍在并发场景中用于解决线程安全的问题,我们几乎会高频率的使用到独占式锁,通常使用jvm提供的关键字synchronized或者juc中实现了Lock接口的ReentrantLock。它们都是独占式获取锁,也就是在同一时刻只有一个线程能够获取锁。而在一些业务场景中,大部分只是读数据,写数据很少,如果仅仅是读数据的话并不会影响数据...转载 2020-01-01 12:28:54 · 786 阅读 · 0 评论 -
深入剖析阻塞队列BlockingQueue (详解ArrayBlockingQueue和LinkedBlockingQueue及其应用)
1. BlockingQueue简介在实际编程中,会经常使用到JDK中Collection集合框架中的各种容器类如实现List,Map,Queue接口的容器类,但是这些容器类基本上不是线程安全的,除了使用Collections可以将其转换为线程安全的容器,Doug Lea大师为我们都准备了对应的线程安全的容器,如实现List接口的CopyOnWriteArrayList,实现Map接口的Conc...原创 2019-12-26 18:20:37 · 3248 阅读 · 0 评论 -
深入理解Condition
1.Condition简介任何一个java对象都天然继承于Object类,在实现线程通信的往往会应用到Object的几个方法,比如wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等待/通知机制,同样的, 在java Lock体系下依然会有同样的方法实现等待/通知机制。从整体上来看O...转载 2019-12-26 14:29:11 · 725 阅读 · 0 评论 -
深入剖析Lock与AQS
1. JUC的基本结构Java开发人员中,我们一般把java.util.concurrent简称为JUC包,泛指我们日常用到的并发多线程中的知识模块。下图是concurrent包的目录结构图。其中包含了两个子包:atomic以及lock,另外在concurrent下的阻塞队列以及executors,这些就是concurrent包中的精华。从整体上来看concurrent包的整体实现图如下图所...转载 2019-12-20 17:45:38 · 442 阅读 · 0 评论 -
深入剖析volatile原理
前言这篇文章,南国对Java并发中的一个重要知识点volatile关键字进行重要的剖析,这是继深入剖析synchronized原理 对并发重要的知识点的详细解析。笔者在写这篇博客时候 许多地方参考了java关键字—volatile.md 仔细读完,获益匪浅。1.volatile简介volatile是java虚拟机提供的最轻量级的同步机制。但它同时不容易被正确理解,也至于在并发编程中很多程序员...转载 2019-12-02 09:18:12 · 185 阅读 · 0 评论 -
深入剖析synchronized原理
前言这篇博客,南国就Java并发编程经常会用到的synchronized关键字做一个深入的剖析。如果读者对于Java并发的一些基础知识没有太多了解,欢迎查看我前段时间写过的Java面试07——并发知识点汇总及源码解析,在这篇博客中我对并发编程中的大部分知识有了一个基础的概括和总结,适合刚入行Java或者准备面试的人群进行复习。这篇博客 ,结合网上其他大佬的技术文章 我主要就synchroniz...原创 2019-05-04 21:38:28 · 484 阅读 · 0 评论 -
Java面试07——并发知识点汇总及源码解析
线程状态转换线程一共有5个状态:1.新建状态(New) :线程对象被创建后,就进入了新建状态,注意这时线程并未启动。例如,Thread thread = new Thread()。2.就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可能被CPU调...转载 2019-02-12 20:09:25 · 474 阅读 · 0 评论