并发包总结
并发包中引入了线程池,好处是:
可以制定灵活的运行策略,比如single的,保证一个一个运行,fixed的可以保证一次只运行一定数量的线程
线程池可以将线程关闭
线程池可以使线程之间进行通讯
锁的好处是:
有公平锁,可以实现先来的线程,先执行
通过lock(reentrantelock)和condition实现同步,在语义上很容易理解
有读写锁,实现缓冲池,保证读的时候,其他读和写都不能操作,大家都读的时候,可以并发读取,提高读的效率
samephore,控制同时访问资源的数量,哪个线程先acquire,哪个可以执行,执行完release掉,其他的空闲线程再抢
cyclicBarrier,路障,每个线程到达路障,都先等待,直到所有的线程都到达这里,再继续向下执行
countdownlatch,倒计时,等倒计时到0的时候,线程开始跑
1)main主线程中有一个倒计时器,1秒钟之后,倒计时器变成0 judge.countdown()
2)子线程在等judge.await(),直到变成0
3)子线程中谁执行完,谁倒计时减去1 sport.countdown()
4) sport信号灯变成0,主线程的judge.await()停止等待,开始执行。
CopyOnWriteArrayList:
1 使用的是reentratlock
2 add的时候加锁,他的目的是可以实现iterator的时候,删除数据,不会有问题;原理是add和remove的时候,会拷贝一个新的数组,修改完之后,切换引用。
arrayblockqueue实现生产者和消费者非常简单,满的时候,自动阻塞,空的时候自动阻塞。
volatile的原理:
1 线程可见性,2 防止代码重排 3 迅速写回主存中
为什么用,什么时候用?
synchronized可以保证原子型,那就保证了线程安全,volatile不能保证原子性,如果一个值是原子操作,那就可以使用他解决多线程安全问题,性能比synchronized高;

浙公网安备 33010602011771号