看图说话-Java并发实践-1

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. 并发程序的测试














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值