同步容器

Vector,HashTable,线程安全,效率较低,目前少用。常用Quere,ConcurrentHashMap等

CopyOnWriteList ,写的时候拷贝一个副本,在副本上操作,写完后把引用指向新的数组。只有写方法加锁,使用synchronized。读方法不加锁。因为写方法时在副本上操作的,没有更新引用时,不影响旧数组。适用于读多写少的情况。

ConcurrentHashMap,CAS,读效率高 

ConcurrentSkipListMap,基于跳跃表,可排序。

Quere,尽量选Quere而不是Vector/List,Quere提供了offer(),peek(),poll()等对线程友好的方法。array满了,add()报异常,offer不会。BlockingQueue 还提供了put(),take()阻塞方法。

几种BlockingQuere:

ArrayBlockingQuere,有界队列,基于数组,指定大小后,不会自动扩张。

LinkedBlockingQuere,基于链表,最长可到Integer最大值。

DelayQuere,按等待时间排序,按时间进行任务调度。本质上是优先队列PriorityQuere。

SynchronusQuere,容量为0,目的不是装东西,而是用于一个线程给另一个线程间传递值(一对一),只能传一个值。如果没有消费者,则会一直阻塞。调用add()会报异常,因为容量为0,所以应该调用put()阻塞方法。

TransferQuere,可接受多个线程传递值(多对多)。比SynchronusQuere多了一个transfer()方法,阻塞的,等有其他线程消费它传递的值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容