多线程开发规范

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、使用本地变量:定义在函数(方法)内部的变量。
本地变量的生存期和作用域都是函数内部。可以节省内存,变量重用
注意:本地变量在没有赋值的情况下,直接使用是会出错的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值