JAVA并发编程
admin
2024-03-28 22:09:05
0

并发编程:
synchronized (悲观锁,非公平锁 ) 与 lock(reetrantLock,readwriteLock)(非公平锁、乐观锁)

synchronized:1.6之前为重型锁:线程获取不到锁会直接进入(锁池)队列等待直到上一个线程释放锁之后才可以争取锁

                        1.6之后引入了锁升级概念:JAVA对象头部(MarkWord)包含锁的信息,锁升级状态由无锁到第一次加锁升级为偏向锁,第二次加锁发生锁竞争则升级为轻量级锁,轻量级锁通过CAS自旋尝试获取锁,如仍然获取不到锁则升级为重量级锁进入锁池等待即1.6之前的方式

reetrantLock:底层采用CAS+AQS方式实现的锁机制,当一个线程想要获取锁先通过CAS自旋方式尝试获取锁;如获取不到则将当前线程封装为Node对象并存入AQS双向队列中,

                          1:AQS双向队列中已有线程在等待则将当前线程挂接在已有线程后面并将指针互相连接上,且挂接成功后会将上一个Node节点的状态(waitStatus)更新为-1表示上一个Node节点后面挂接的Node节点可被唤醒,处于AQS队列的头部Node节点会通过CAS方式尝试获取锁资源

                          2:AQS双向队列中没有线程在等待,则会创建一个虚拟的头部节点(head)并将当前Node节点挂接在虚拟节点之后,且将虚拟头部节点(head)的状态(waitStatus)设置为-1,以便更高效率的唤醒后面的线程节点

readwriteLock:读读不互斥,读写互斥,写写互斥;与reetranLock的区别在于更在细化的对锁的颗粒度做了区别,以适用读、写的不同场景下的效率提升

concurrentHashMap:多线程并发的线程安全集合类;采用数组+单向链接+红黑树的数据结构 ,当数组长度大于64(实则为了优化效率,数组的查询时间复杂度为O(1))且单向链表长度大于8(优化效率,单向链接的查询时间复杂度为O(n))时单向链接将转化成红黑树结构(时间复杂度Ologn)

CAS:比较并交换;程序运行时会先从内存中获取数据到CPU进行计算,再将计算完的结果写入到内存

                             1:如果多个线程同一时间从内存中获取同一份的数据进行计算则会引发数据不一致性的问题(其他线程不能及时拿到某一线程计算完写入的内存中的数据)

                              2:因此CAS的方式就是数据在CPU计算完之后写入到内存时,会比较此时内存中的值与当前CPU中获取的值是否一致,如一致则认为没有其它的线程修改过值正常写入,反之就认为值被其它线程篡改过则写入失败,再次通过CAS自旋方式直到写入成功为止

 Executors创建线程池的几种方式:

  newFixedThreadPool:固定线程数的线程池,当添加的线程数超过定义的线程数时则进入阻塞队列(LinkedBlockingQueue),遵循FIFO(先进先出)原则等待线程池中有空闲的线程数时再 进行工作

  newScheduledThreadPool:固定线程数的定时任务线程池,底层采用延迟队列(DelayedWorkQueue),可按固定的周期或者延迟多久的时间执行任务

newCachedThreadPool:创建存活时间为60秒的线程池,当前第一次有任务进来会直接创建新线程,如60秒内再次有任务进入会复用已创建的存活线程执行任务,如60秒内无任务进入则会结束当前线程池。如60秒外有任务进入则会创建新的线程执行;因为任务只要提交线程池中,就必然会有线程处理

newSingleThreadExecutor:单例线程池,线程池中只有一个线程在工作,后续进来的任务会进入到阻塞对列中等待,遵循FIFO(先进先出)原则,因此单例线程池适合按顺序执行的一系列任务

 newWorkStealingPool:并行计算底层使用ForkJoinPool;核心思想分而治之,线程窃取;使用场景,将一个大的任务按照一定的规则拆分(需手动编写拆分逻辑) 并放到当前线程的阻塞队列当中,其它的空闲线程可以去处理有任务的线程的阻塞列队中的任务 ,优点:线程池中空闲线程可以被充分利用                     

线程数计算:

核心线程数=cpu核数 * cpu利用率 * (1 + w/c)=cpu核数 * (1-阻塞系数)

相关内容

热门资讯

中国蔬菜种子自给率接近91%,... 7月1日消息,据了解,我国的蔬菜种子自给率接近91%,有力保障了“菜篮子”的丰富性。在北京通州国际种...
恒通股份:全资子公司恒福绿洲拟... 7月1日消息,恒通股份公告,全资子公司山东恒福绿洲新能源有限公司计划以8181.2万元收购公司控股子...
无法退款!罗马仕淘宝商家余额不... 红星资本局7月3日消息,近日,多名消费者反映,在罗马仕淘宝官方店铺申请充电宝退款时,因卖家账户余额不...
广东银行业IPO格局生变:两家... 出品|达摩财经深交所官网显示,6月30日,东莞银行、南海农商行已更新财务资料,IPO审核状态恢复为“...
稳定币概念股要分化?港股多点数... 本文来源:时代周报 作者:黄宇昆资本市场稳定币的热潮仍在持续。7月3日,有市场消息称,港股上市公司多...
纳指盘中再创新高 纳指盘中再创... 【纳指盘中再创新高】周四,纳斯达克指数涨幅一度扩大至1%,再创历史新高。在美上市光伏板块集体上涨,旭...
金地集团为子公司提供16亿元融... 新京报贝壳财经讯 7月3日,金地集团发布关于为南京项目公司融资提供担保的公告。公告显示,其子公司深圳...
爆卖19万只!惯性传感器撬动2... 本文来源:时代商业研究院 作者:孙华秋 来源|时代商业研究院作者|孙华秋编辑|韩迅当半导体赛道被中芯...
首家地方AMC冲刺港股 河北资... 作者 | 郭聪聪编辑 | 方海平新媒体编辑 | 实习生 艾昱彤港交所最新披露信息显示,河北资产管理股...
行业回暖驱动销量激增46%,晶... 本文来源:时代商业研究院 作者:孙华秋 来源|时代商业研究院作者|孙华秋编辑|韩迅【导语】随着全球半...