并发包总结

并发包中引入了线程池,好处是:

可以制定灵活的运行策略,比如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高;

 

posted @ 2017-10-17 22:59  Hill_Dong  阅读(105)  评论(0)    收藏  举报