【2019秋冬】《实战Java高并发程序设计》第3章 JDK并发包

一、同步控制工具
重入锁(synchronized,wait,notify的加强版)

java.util.concurrent.locks.ReentrantLock

重入锁可以用lock,unlock手动控制,注意必须记得释放锁

重入锁可以避免死锁
1)可以反馈中断,防止两个线程相互等待造成死锁
2)tryLock()进行限时等待,防止死锁
3)synchronized锁是非公平的,重入锁是公平的

public ReentrantLock(boolean fair)

锁默认都是非公平的,因为公平锁成本更高
重入锁实现三要素
1)原子状态 用CAS存储当前锁状态
2)等待队列 没有请求到锁的线程,进入等待队列等待随机唤醒
3)阻塞原语 park() unpark()用来挂起和恢复线程

Condition条件
wait notify是和synchronized搭配使用
Condition是和重入锁搭配使用,通过Lock接口,生成一个与当前重入锁绑定的Condition对象,让线程在合适时间等待或执行

await() //使当前线程等待,并释放锁
signal() //唤醒一个在等待中的线程

Semaphore 信号量,对锁的扩展,指定多个线程访问某一个线程
ReadWriteLocks 读写锁
LockSupport 线程阻塞
park()阻塞当前线程 unpark()释放当前线程
与suspend() resume()对应

二、线程池
使用线程池,就是创建线程变成了从线程池获取空闲线程,关闭线程变成了向池子归还线程
JDK提供了Executor框架,ThreadPoolExecutor表示一个线程池

newFixedThreadPool() //创建一个固定线程数量的线程池
newSingleThreadExecutor() //创建一个只有一个线程的线程池
newCachedThreadPool() //创建一个可根据实际情况调整线程数量的线程池

内部均使用ThreadPoolExecutor方法
ThreadPoolExecutor制定了拒绝策略解决超载问题
线程池里的线程都是从ThreadFactory接口创建的

三、并发容器

JDK提供的并发容器大部分在java.util.concurrent包中
ConcurrentHashMap 线程安全的HashMap,可高并发
ConcurrentLinkedQueue 线程安全的LinkedList,链表实现,高并发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值