1. 程序之外的框架可能需要的线程安全:
×Timer
×Servlet/JSP
×RMI
×Swing/AWT
2.线程安全性
无状态对象一定是线程安全的。(无状态是指对象不包含任何域,也不包含对其他类域的引用)
3.在进行一个较长时间的运算(如网络IO或控制台IO),不要使用锁。
4.锁的功能不仅是保证同步性同时也保证可见性。
5.SyncronousQueue作用:因为没有容量,是一种轻量级的队列,可用于实现线程间的消息同步。
6.Executor框架,一个生产-消费模式的框架。
7.Deque双向队列,工作于工作取密场景,或者既是生产者又是消费者场景。每个消费者拥有自己单独的双向队列。
8。线程阻塞原因:IO操作(Blocked),等待锁(Waiting),sleep(Time_Waiting)
9. Executor框架同步工具:
Executor:
ExecutorService:
Executors:
FutureTask:
10. Semaphore具备不可重入语义。用于实现资源池,如数据库连接池。(更简单方法是使用BlockingQueue)
11. Executor框架好处
12. Thread Pool
13.Executor生命周期
14.Timer和ScheduleExecutor对比
15. Future和Callable
16. 异构任务并发提升性能是困难的,反之同构任务并发对性能提升明显。
17.Executor Completion Service
18.线程的取消
>>>Example<<<
>>>Example2 - 基于Executor框架的Future<<<
19. 关闭线程容器服务
20. ExecutorService关闭
21. “毒丸”模式关闭线程服务
22. 任务幂等:任务执行一次和多次的结果相等。
23.处理非正常的线程终止
23. JVM关闭钩子
24.守护线程和终结器
25. 在线程池中,如果线程依赖其它线程,那么可能产生死锁。
26.Semaphore在Executor中应用
27. 循环/递归并行化
28. 计算线程池大小
29. ThreadPoolExecutor 配置
30. 带值的闭锁
31. 活跃性问题-死锁
32. JDBC Connection不是线程安全的
33.应该避免修改线程优先级,这会导致线程饥饿的活跃性问题
34.在处理一个计算密集/CPU密集型的任务是,可能会与其他线程竞争,这时候可以调高该任务的优先级,或调低其他任务的优先级,让该任务尽快执行完,减少线程的切换,从而提高程序的响应性。
××××以太网指数回退算法
二进制指数退避算法的核心是随机进行监听,这个退避时间片的大小范围和冲突的次数有关,比如冲突次数n=2,避让的时间片的取值范围是r={0,1,2,3}。该问题的冲突是12次,因此最大的值是 2^12-1。你要注意的是在这种算法中要预先设定一个可以选择的最大时间片数k,也就是说当你采用避让算法时最终取值是min(k,r)。(超出了预设的时间片数时随机避让的时间片大小就只能是k)
35. 活跃性问题
36.并发性和可伸缩性
37. 并发的同步
38. 锁竞争优化
39. 监测CPU利用率
40. 谨慎使用 对象池
41.
42. 并发程序的测试