zoukankan      html  css  js  c++  java
  • 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()都表现出弱一致性。他们只能标示容器当时的一个数据状态。无法完整响应容器之后的变化和修改

  • 相关阅读:
    Unity3D实践系列08, MonoBehaviour类的各种触发事件
    Unity3D实践系列07,组件的启用或禁用开关,物体的的可见或不可见开关,以及相应事件
    Unity3D实践系列06,球体撞击物体游戏
    Linux tee的花式用法和pee
    bash内置命令mapfile:读取文件内容到数组
    Perl正则表达式引用
    Perl文件句柄引用
    透明代理、正向代理、反向代理的区别说明
    Perl回调函数和闭包
    一文搞懂:词法作用域、动态作用域、回调函数、闭包
  • 原文地址:https://www.cnblogs.com/eaglediao/p/7086833.html
Copyright © 2011-2022 走看看