并发编程笔记篇
文章平均质量分 79
记录博主关于java并发编程的学习笔记
Danny_idea
热爱技术,热爱生活,一步一个脚印。
更多宝贵知识记录可以关注个人公众号:Idea的技术分享
展开
-
java并发编程的艺术(8)深入解析ConcurrentHashMap
转载自:https://www.cnblogs.com/wuzhitong/p/8492228.html 以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同...转载 2019-02-04 15:23:55 · 245 阅读 · 2 评论 -
java并发编程的艺术(7)LockSupport
关于LockSupport工具类的使用 在阅读aqs源码的时候,经常会看到使用了LockSupport工具类,这个工具类里面提供了两个用于堵塞现线程和解除线程堵塞的接口: park unpark 核心源码: private static void setBlocker(Thread t, Object arg) { // Even though volatile, hotspot does...原创 2019-02-04 10:08:52 · 204 阅读 · 0 评论 -
java并发编程的艺术(6)深入挖掘aqs独占锁源码
并发编程里面的很多常用的类,例如ReentrantLock,Semaphore,CountDownLatch实际上底层都是通过使用AbstractQueuedSynchronizer(AQS)来进行实现的。那么今天我们就来仔细聊聊AQS这样东西。 底层的核心主要是维护一个volatile int waitStatus的状态值,以及一个FIFO线程等待队列。对于waitStatus变量,AQS里面提...原创 2019-01-28 16:16:45 · 184 阅读 · 0 评论 -
java并发编程的艺术(5)CountDownLatch笔记
什么是CountDownLatch? 这是一种可以使得某个线程等待其他线程完成各自工作之后,同步执行的一个工具类。 原理: 通过一个计数器,初始值为所有线程的数量,当线程开启之后,数值减少1,当数值为0的时候,表示所有线程已经完成任务。 CountDownLatch如何工作 构造器中的计数值(count)实际上就是闭锁需要等待的线程数量。这个值只能被设置一次,而且CountDownLatch没有...原创 2019-01-28 16:12:58 · 329 阅读 · 0 评论 -
java并发编程的艺术(4)CAS笔记
CAS(Compare And Swap ) 在java里面的锁,我们经常会谈起一些乐观锁和悲观锁。 其实两者的区别主要就在于对数据加锁的时候是采取乐观的策略还是悲观的策略罢了。 但是由于每一次加锁的时候,实际上都会在访问共享资源时发生冲突,线程需要进行等待锁的解开。而cas技术主要是一种无锁的机制,采用cas技术可以保证线程之间的安全性。 在常说的cas里面有我们常说的几个关键概念: 执行函数:...原创 2019-01-28 16:09:27 · 269 阅读 · 0 评论 -
java并发编程的艺术(3)各种锁的机制
转载自:https://www.cnblogs.com/aspirant/p/6930436.html 如果需要查看具体的synchronized和lock的实现原理,请参考:解决多线程安全问题-无非两个方法synchronized和lock 具体原理(百度) 在并发编程中,经常遇到多个线程访问同一个 共享资源 ,这时候作为开发者必须考虑如何维护数据一致性,在java中synchronized关...转载 2019-01-28 15:47:05 · 222 阅读 · 0 评论 -
java并发编程的艺术(2)浅谈volatile和synchronized
再多线程编程里面,难免避免不了volatile和synchronized这两个关键字。关于volatile这个关键字,最著名的就是“可见性”问题了,所谓的可见性问题是指:当有多个线程访问同一个共享变量,并且对这个变量进行修改之后,另外的一个线程里面可以读取到这个最新修改的值。 关于volatile的定义和原理 Java语言规范第3版中对volatile的定义如下:Java编程语言允许线程访问共...原创 2018-07-14 18:27:47 · 219 阅读 · 0 评论 -
java并发编程的艺术(1)并发编程的挑战
在常见的多线程编程里面,我们总是希望创建多个线程来让程序的运行速度更加快速。但是,并不是启动更加多的线程就可以让程序运行地更加快速了。例如说当出现了上下文切换的情况和死锁的情况。因此下边小编会编写一些典型的案例来说明并发和串行的效率区别。 上下文切换: 使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,...原创 2018-07-14 14:26:59 · 265 阅读 · 0 评论