《Java多线程编程实战指南-设计模式篇》笔记

线程池大小

1.CPU密集型:考虑设置 Cpu数+1
2.I/O密集型:考虑设置 2*Cpu数

线程泄漏(Thread Leak)

含义:指线程池中的工作者线程意外中止,使得线程池中实际可用的工作者线程变少。如果线程泄漏持续存在,那么线程池中的工作者线程会越来越少,导致线程池无法处理交给其的任务。
例子:SocketInputStream.socketRead0引起线程池提交任务后,futureTask.get超时

正确的预防方式

1.处理可恢复的异常。
2.设置超时等待。

ThreadLocal的使用

a.使用ThreadLocal做一个线程安全的工具类。

如:SecureRandom使用的时候,初始化比较耗时,且nextInt是一个同步的方法,当多个线程大量调用的时候会引起竞争,从而降低效率。

方法:
1.可以使用ThreadLocal为每个线程set一个SecureRandom的实例。
2.可以继承ThreadLocal,实现一个子类,其成员变量持有一个SecureRandom的实例。

threadLocal适用的场景:

1.需要使用非线程安全的对象,又不想引入锁。
2.使用线程安全对象,但希望避免其使用到锁的开销和相关问题。
3.隐式的参数传递:同一线程内全局对象。
4.特定线程的单例模式:不同于常见的单例是一个jvm中的一个类加载器,某个类有且只有一个实例。这里是同一线程只有一个实例。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章