java多线程编程建议

多线程编程建议

1,将应用设计成支持多线程并发,可提高性能

2,编写多线程程序,首先保证它是正确的,其次再考虑性能

3,同步处理的开销大于非同步处理,如果可能,尽量使用非同步处理

4,避免多个共享变量共用一把锁,每个共享变量,都应该由一个唯一确定的锁保护

5,采用分拆临界资源等方式减少多线程阻塞或者等待

6,虽然缩小同步块的范围,可以提升系统性能。但在保证原子性的情况下,不可将原子操作分解成多个synchronized块

7,单一不可变对象往往是线程安全的(复杂不可变对象需要保证其内部成员变量也是不可变的)良好的多线程编程习惯是:将所有的域都声明为final,除非它们是可变的

8,设计线程安全的类,应该包括的基本要素:

      a,确定哪些是可变共享变量

      b,确定哪些是不可变的变量

      c,指定一个管理并发访问对象状态的策略

9,对于可能被其它代码频繁调用的方法,对于常用工具类的方法,对于不能确认被其它代码如何调用的方法,需要关注同步问题

10,充分考虑复杂性,在满足应用需求的情况下,使用Java提供的线程池、并发容器

11,考虑切换、资源占用等开销,合理设置并发的线程数量

12,新起一个线程,都要设置线程名

13,多线程操作同一个字符串相加,应采用StringBuffer.

        StringBuffer:线程安全的,append()等都是synchronized方法。

        StringBuilder:非线程安全。

14,使用普通同步容器(Vector,Hashtable)的迭代器,需要外部锁来保证其原子性。原因是,普通同步容器产生的迭代器是非线程安全的

15, ConcurrentHashMap,CopyOnWriteArrayList并发容器的迭代器,以及全范围的size(),isEmpty()都表现出弱一致性。他们只能标示容器当时的一个数据状态。无法完整响应容器之后的变化和修改

原文地址:https://www.cnblogs.com/eaglediao/p/7086833.html