探索并发编程(六)------Java多线程性能优化

发表于:2011-9-29 09:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:cutesource    来源:51Testing软件测试网采编

分享:

  3)减少共享资源的依赖

  共享资源是竞争锁的源头,在多线程开发中尽量减少对共享资源的依赖,比如对象池的技术应该慎重考虑,新的JVM对新建对象以做了足够的优化,性能非常好,如果用对象池不但不能提高多少性能,反而会因为锁竞争导致降低线程的可并发性。

  4)使用读写分离锁来替换独占锁

  Java 5提供了一个读写分离锁(ReadWriteLock)来实现读-读并发,读-写串行,写-写串行的特性。这种方式更进一步提高了可并发性,因为有些场景大部分是读操作,因此没必要串行工作。关于ReadWriteLock的具体使用可以参加一下示例:

  • public class ReadWriteMap<K,V> {  
  •     private final Map<K,V> map;  
  •     private final ReadWriteLock lock = new ReentrantReadWriteLock();  
  •     private final Lock r = lock.readLock();  
  •     private final Lock w = lock.writeLock();  
  •     public ReadWriteMap(Map<K,V> map) {  
  •         this.map = map;  
  •     }  
  •     public V put(K key, V value) {  
  •         w.lock();  
  •         try {  
  •             return map.put(key, value);  
  •         } finally {  
  •             w.unlock();  
  •         }  
  •     }  
  •     // Do the same for remove(), putAll(), clear()   
  •     public V get(Object key) {  
  •         r.lock();  
  •         try {  
  •             return map.get(key);  
  •         } finally {  
  •             r.unlock();  
  •         }  
  •     }  
  •     // Do the same for other read-only Map methods   
  • }
  •   切换上下文

      线程比较多的时候,操作系统切换线程上下文的性能消耗是不能忽略的,在构建高性能web之路------web服务器长连接可以看出在进程切换上的代价,当然线程会更轻量一些,不过道理是类似的

      内存同步

      当使用到synchronized、volatile或Lock的时候,都会为了保证可见性导致更多的内存同步,这就无法享受到JMM结构带来了性能优化。

    相关链接:

    探索并发编程(一)------操作系统篇

    探索并发编程(二)------写线程安全的Java代码

    探索并发编程(三)------Java存储模型和共享对象

    探索并发编程(四)------Java并发工具

    探索并发编程(五)------Java多线程开发技巧

    33/3<123
    重磅发布,2022软件测试行业现状调查报告~

    关注51Testing

    联系我们

    快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

    法律顾问:上海兰迪律师事务所 项棋律师
    版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
    投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

    沪ICP备05003035号

    沪公网安备 31010102002173号