Effective java经验之谈,并发编程

内容包括,并发与并行,并发约束,并发下的集合类性能分析,并发相关包的概述,并发场景,并发总结
转载请注明出处:http://blog.csdn.net/supera_li/article/details/45198341

Effective java系列
1.Effective java经验之谈,创建和销毁对象
2.Effective java经验之谈,泛型
3.Effective java经验之谈,类与接口
4.Effective java经验之谈,通用方法
5.Effective java经验之谈,枚举,注解,方法,通用设计,异常
6.Effective java经验之谈,并发编程

集合包

关于集合类的并发实现:
http://blog.csdn.net/supera_li/article/details/39371087
下面是接口关系
1.接口Collection->List,Set
List–>>ArrayList,LinkedList,Vector(线程安全,实现同ArrayList),Stack(继承Vector实现的LIFO)
Set–>>HashSet(基于HashMap实现),TreeSet(基于TreeMap实现)

对性能影响的2个方法:add(E),remove(E),get(int index),contains(E)

2.接口Map->HashMap(可添加null的key与values),TreeMap(红黑树实现,comparator实现的k可实现排序)

3.性能结论
单线程测试场景性能结论:List的实现随着元素数量的上升,查找和删除元素的性能下降较为严重,Set,Map影响不大。如果对于查找和删除频繁,且元素数量较多(>10^4)的应用,Set或Map是更好的选择。
多线程测试场景性能结论:相对于单线程性能都大幅度下降,元素数量级在10^3次方的时候,影响性能的因素主要取决于线程数,线程数越多,性能下降越多。

并发包

1.ConcurrentHashMap(类HashMap的并发类)
2.CopyOnWriteArrayList(在读多写少的并发场景下,比ArrayList是更好的选择)
3.CopyOnWriteArraySet(类ArraySet的并发类)
4.ArrayBlockingQueue(并发队列)
5.AtomicInteger(cpu的CAS原语实现,获得递增id并发场景使用这个)
6.ThreadPoolEXecutor(线程池对象,执行任务用的,有各种执行策略可选)
7.Executors(提供不同类型策略的ThreadPoolEXecutor创建方法)
8.FutureTask(用于调用多次只执行一次任务的连接池场景中)
9.Semaphore(控制某资源同时被访问的个数的类)
10.CountDownLatch(控制多个线程同时开始某动作的类)
11.CyclicBarrier(await数量到达的设定值后,才继续往下执行)
12.ReentrantLock(控制并发资源的类,与synchronized语法到达的效果一致)
13.Condition(并发接口,实现类有ReentrantLock,以便用户在同一个锁的情况下可以根据不同的情况执行等待或唤醒动作)
14.ReentrantReadWriteLock(该类读,写锁分离。不同于ReentrantLock一把锁)

并发约束

  1. 同步访问共享的可变数据。同步的范围应当是读与写。
  2. 避免过度同步。同步会带来性能开销
  3. Executor和task优先于线程
  4. 并发工具优先于wait和notify
  5. 线程安全性的文档化。
  6. 慎用延迟初始化。
  7. 不要依赖于线程调用器。不然程序的移植性会很差。
  8. 避免使用线程组

参考资料:
[1]并发框架Executor框架资料可参考这位博主写的:
http://www.iteye.com/topic/366591

[2]Parallelism and concurrency need different tools[并行与并发需要不同的工具]
并发(名词):指竞争或对抗。
并行:指两条直线永不相交的状态。
http://www.oschina.net/translate/parallelism-and-concurrency-need-different-tools

[3]分布式java应用 基础与实践 sun SDK库章节

[4]effective java 并发章节

[5]并发编程学习总结 引用
http://www.cnblogs.com/chgaowei/archive/2012/06/06/2538074.html

你可能感兴趣的:(并发,接口,集合,set)