1、不要乱用线程池,当任务调度时间与任务完成时间相差很小时,用线程池反而效率很低
2、使用不可变类:String、DateTimeFormatter等被final修饰的类
在多线程中不可变的对象是线程安全的
3、最小化锁的作用域范围:S=1/(1-a+a/n)阿姆达尔定律
在高并发程序设计中有非常重要的定律,内容太多不做赘述建议百度深入了解
4、使用线程池的Executor,而不是直接new Thread执行
new Thread非常消耗内存、效率很低、没有拓展性的功能,比如线程监控等
5、宁可使用同步也不要使用线程的wait和notify
多线程中wait和notify的可靠性太低了,可能会出现线程“假死”的情况,而且效率还低
6、多使用BlockingQueue实现生产-消费模式
生产者-消费者模式是一个经典的多线程设计模式,它的作用是生产者与消费者之间的通信桥梁,避免二者之间的直接通信,有效地降低了二者耦合性。
7、使用并发集合而不是加了锁的同步集合
ArryList 换成 CopyOnWriteArrayList:对写操作加了锁
HashSet、TreeSet 换成 CopyOnWriteArraySet
HashMap、TreeMap 换成 ConcurrentHashMap、ConcurrentSkipListMap
8、使用Semaphore创建有界的访问
Semaphore能对线程限流,从而不至于让我们的系统奔溃掉,我们可以根据硬件配置和业务实际情况来决定限流的数量
9、宁可使用同步代码块,也不使用同步的方法
自从JDK1.6对synchronized优化以后,它完全可以胜任中小型并发,但注意在需要做同步的地方使用代码块的方式,能更好的提升吞吐量
10、避免使用静态变量
静态本身就是线程不安全的,静态变量每次使用后jvm不会回收静态变量,需要我们手动回收,不然会一直占用内存
11、使用本地变量:定义在函数(方法)内部的变量。
本地变量的生存期和作用域都是函数内部。可以节省内存,变量重用
注意:本地变量在没有赋值的情况下,直接使用是会出错的。

1135

被折叠的 条评论
为什么被折叠?



