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

  • 相关阅读:
    矩阵按键转化为普通单个按键
    表达式位长 对结果的影响
    LuoguP3674 小清新人渣的本愿 && BZOJ4810: [Ynoi2017]由乃的玉米田
    BZOJ2956: 模积和
    NOIP2016 天天爱跑步
    LuoguP3948 数据结构
    AT2442 フェーン現象 (Foehn Phenomena)
    博客园美化笔记
    BZOJ2242: [SDOI2011]计算器
    分块入门与分块的经典应用
  • 原文地址:https://www.cnblogs.com/eaglediao/p/7086833.html
Copyright © 2011-2022 走看看