![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程
文章平均质量分 92
并发编程
Home Well Go
这个作者很懒,什么都没留下…
展开
-
java线程并发安全概要
java并发编程基础概念JAVA内存模型与线程安全无锁(保证线程的原子性)JDK并发包基础概念同步与异步同步:同步调用需要等待方法执行完成后返回异步:不用等待执行方法执行完成后就直接放回,但不会马上有返回值并发与并行并发:线程之间进行调度执行并行:两个或多个线程同时执行临界区临界区:表示一个公共资源或共享数据,可以被多个线程共享,但是每一次只能有一个线程进入使用,...原创 2020-03-12 23:31:10 · 260 阅读 · 0 评论 -
线程同步工具使用
ReentrantLock(重入锁)特点:可重入可中断:可对正在执行的线程进行中断可限时:可以设置在多少时间单位内没有获取到资源则执行其他业务方法公平锁:避免产生饥饿现象,但是性能会降低重入锁实现:cas状态:判断当前锁是否被占用等待队列:将所有在等待状态的线程都保存在队列中park():对进入队列的线程进行挂起,当拥有锁的线程释放完锁后,会调用unpark()启动队...原创 2020-03-15 16:29:48 · 200 阅读 · 0 评论 -
深入理解ThreadLocal实现原理
目录锁优化的思想ThreadLocal及其源码分析锁优化的思想减少锁持有时间像比如在调用某个方法时其中只有一小部分是需要同步的,那么大可不必将整个方法上锁,而是对需要同步的这一小块代码加上同步锁,以此来降低锁持有的时间,该优化还会提高自旋锁的成功率。减小锁的颗粒度将一个大对象拆成小对象,增加并行度降低锁的竞争,比如jdk。1.7的concurrentHashMap中就是采用分段...原创 2020-04-10 18:41:54 · 241 阅读 · 0 评论 -
ConcurrentHashMap内层原理
集合包装HashMap实现原理:JDK1.8之前:结构:采用的是hashEntry数组加链表的结构,首先计算当前存入的k-v的key的hashcode值来查看应该被放到数组的那里,找到对应的索引后再用key去比对对应索引中的链表,如果有key值与当前的值是相等的则进行覆盖,否则将该k-v加入到链表中。但是当hash冲突过多时就会导致链表长度越来越长,那HashMap的查询效率也会...原创 2020-03-15 16:33:12 · 213 阅读 · 0 评论 -
深入解析AQS实现原理(一)
AbstractQueuedSynchronizer(AQS)AbstractQueuedSynchronizer简称AQS,提供FIFO(先进先出)的队列,像之前的ReetrantLock、Semaphore、CounDownLatch等就使用到了该队列,AQS是一个抽象的类,下面先看看其子类的实现我们先看关于AQS的内部部分源码:AQS中的常量:同步对列头引用head和同步队列...原创 2020-03-25 18:48:51 · 205 阅读 · 0 评论 -
深入解析AQS实现原理 (二)
AQS共享模式解析共享锁,需要实现tryAcquireShared和tryReleaseShared方法,但不管是共享还是排他锁都继承自AQS,所以其节点内部结构不会有变化。首先我们要了解什么是共享锁,就是当某个线程对临界区进行读取时其他线程只能在对临界区进行读操作,不能有排他锁的存在。直到线程释放共享锁后写操作才能尝试排他锁,Semaphore是共享模式的实现类,根据AQS子类实现列表我...原创 2020-03-28 11:28:21 · 148 阅读 · 0 评论 -
Synchronized内层原理
目录Synchronized是什么?Synchronized的三种方式Synchronized是什么?synchronized 关键字可以在方法、对象、类上加锁,当被他锁定了后有且只有一个线程能够执行访问临界区的数据,而其他的线程必须要等待获取到锁的线程释放锁之后才能去访问临界区的数据,以保证临界区的数据不会因为多个线程的读写操作造成数据问题。Synchronized的三种方式1.普通...原创 2020-03-31 17:41:41 · 159 阅读 · 0 评论 -
java线程池核心构造
线程池基本使用为什么需要线程池JDK提供的线程池线程池的使用线程池的共性为什么需要线程池因为如果不使用线程池的化,就需要每次使用线程的时候创建并销毁线程,造成了资源的浪费。而使用线程池对线程进行管理,线程只需要一次性创建并可以进行重复的使用,并且还可以根据需要调整线程池的大小来执行相应的方法。JDK提供的线程池线程池的使用线程池的种类newFixedThreadPool说...原创 2020-03-15 16:38:44 · 165 阅读 · 0 评论 -
如何在多线程下调试线程
目录条件断点java Dump条件断点条件断点调试能够方便我们在调试过程中对某个特定的线程或特定的值进行调试,在大量的循环操作或是高并发情况下的断点调试会十分的不方便,而条件断点调试可以根据的你条件对响应的代码进行调试。首先是在调试处打上断点,之后可以右键断点就会出现以下的条件输入框,或者是快捷键Ctrl+Shift+F8唤出条件输入框。java Dumpjps命令jp...转载 2020-05-09 15:43:41 · 539 阅读 · 0 评论 -
扩展和增强线程池
目录线程池扩展——回调:拒绝策略线程池扩展——回调:public class EXTThreadPool { //核心线程数 private static final int THREADPOOLCORESIZE=5; //最大线程数 private static final int THREADPOOLMAXSIZE=5; public static...原创 2020-03-15 16:49:25 · 161 阅读 · 0 评论