java并发编程--09(多线程编程的最佳实践)

1.使用本地变量(局部变量)

    应该尽量的使用本地变量,而不是创建一个类或者实例的形式

2.使用不可变类

   比如String类,它可以降低代码中同步数量

3.最小化锁的作用域范围 安达尔定理

    

    简单来说就是被锁起来的代码越少越好

4.使用线程池Executor,而不是直接使用new Thread()

5.宁可使用同步,也不要使用线程的wait和notify

 java 1.5以后增加了许多的同步工具类,应该优先使用同步工具,而不是去思考使用线程的wait的notify方法

6.使用BlockingQueue实现生产与消费模式

  大部分的并发问题都可以使用生产消费的问题来解决,而BlockingQueue是最好的实现方式,单个生产单个消费,多个生产多个消费都可以处理。

7.使用并发集合,而不是加了锁的同步集合

8.使用Semaphore创建有界的访问

   对于数据库,文件系统,Socket等资源必须要做有界的访问,可以通过Semaphore来指定同时访问资源的额线程数

9.宁可使用同步代码块,也不使用同步的方法

10.避免使用静态变量

 如果非要用那就让他编程final的,如果是集合的话使用只读集合

11.Spring与多线程安全

 Spring并没有保证这些Bean的线程安全,Bean默认为单例的(singleton),该Bean的生命周期与Spring IOC的生命周期是一致.其次prototype,他在每次注入的时候都会创建一个对象。我们交由Spring管理的对象大多都是一些无状态的对象,比如DTO,VO,Service,Dao,Controller,每个无状态的对象都是线程安全的,不涉及状态的改变所以不存在线程安全的问题。如果我们必须创建有状态的对象的时候,我们就要使用ThreadLocal把变量变成私有的,如果变量需要在多个线程之间共享,那么就要使用syn,Lock,CAS等这些来实现线程同步的方法

发布了217 篇原创文章 · 获赞 70 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_37650458/article/details/103466075