• Java随谈(四)JDK对并发的支持


    Java对并发的支持

    在Java诞生之时,Java设计者们就考虑了并发的问题,但受限于当时的技术和需求,只是对其进行了简单的支持。
    随着时代更替(多核处理器的普及,提高了程序员对处理器的使用效率的诉求),并发成为了一个需要关注的功能点。

    这里,博主将概述Java各个版本(截止到JDK8)对于并发的支持的发展,便于理解这些类、接口,为何出现,又为了解决哪些问题。

    在JDK1.4及之前

    1. 1.synchronized、volatile关键字
    2. Object的wait()、notify()、notifyAll()方法
    3. Thread类,以及Runnable接口
    4. final 不变属性以及一些不变的类,比如String
    5. 基础但已经不被推荐使用的集合 Vector、HashTable

    在这个时期,Java对并发做的支持比较底层,需要程序员手动管理需要同步的类或对象。这种情况下,除非程序员对并发有非常深的理解,才能用好这些内容。(过于底层,不易理解,编程困难
    而且由于synchronized是重量级锁,需要经常切换线程,效率比较低。(并发效率不高

    JDK1.5

    1. AtomicXXX类
    2. Lock显式锁(Lock、ReadWriteLock、Condition等接口)
    3. Callable、Future接口
    4. Executor执行器、ExecutorService两个接口以及实现类
    5. 并发集合BlockingQueue、ConcurrentMap、ConcurrentHashMap、CopyOnWriteArrayList

    在这个时期,Java对并发进行了大刀阔斧的改进。
    新增的原子操作类型比volatile关键字更易用且高效;(简化并发编程,优化性能)
    Lock显示锁不同于synchronized引入了一种新的机制;(引入一种轻量的锁)
    执行器使用了线程池机制,简化并发操作。(简化并发编程)
    新增的并发集合比起之前的Vector、HashTable(仅在方法上添加synchronized关键词),引入了更多机制,性能也更高。

    JDK1.6

    1. 优化后的synchronized关键字,使用分级锁机制。

    这个时期,对同步关键字进行了优化、之前只存在一种重量级锁,后引入了偏向锁轻量级锁,减少了线程切换的次数。(从语法上优化了并发性能)
    优化后的synchronized关键字性能可以和Lock媲美。

    JDK7

    1. Fork/Join框架(分解/合并框架)
    2. TransferQueue接口以及实现类
    3. ThreadLocalRandom 支持并发随机数
    4. Phaser工具类 阶段性并发工具类

    在这个时期,提供了使用分治技术的Fork/Join框架等。

    JDK8

    1. XXXAdder加法器、XXXAccumulator累加器(优化后的原子类型操作)
    2. CompletableFuture(Future升级版本)
    3. StampedLock (ReadWriteLock改进版本)
    4. 静态commonPool(为ForkJoinPool提供了多一种选择)
    5. StampedLock(新增在写,读和乐观读的三种模式转化的锁)
  • 相关阅读:
    深入浅出Tomcat/2
    深入浅出Tomcat/1- 来历和配置文件
    深入浅出:HTTP/2
    深入浅出:5G和HTTP
    深入浅出:远离法律风险,必须了解开源项目许可证
    深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么
    深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么
    深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么
    一个微信群的现状
    Hbase原理、基本概念、基本架构
  • 原文地址:https://www.cnblogs.com/kwanwoo/p/14001674.html
Copyright © 2020-2023  润新知