个人简介

Echo Blog


江湖无名 安心练剑
  • JCIP-37-StampedLock 读写锁中的最强王者
    StampedLock 简介 我们前面介绍了 ReentrantReadWriteLock可重入读写锁详解,不过 jdk1.8 引入了性能更好的 StampedLock 读写锁,我愿称之为最强! 一种基于能力的锁,具有三种模式用于控制读/写访问。 StampedLock的状态由版本和模式组成。 锁定采集方法返回一个表示和控制相对于锁定状态的访问的印记; 这些方法的“尝试”版本可...
    2019-01-18 03:21:15 | Concurrency
  • JCIP-36-ReentrantReadWriteLock 读写锁详解
    ReentrantLock 锁回顾 在Java5.0之前,只有synchronized(内置锁)和volatile. Java5.0后引入了显示锁ReentrantLock. ReentrantLock是可重入的锁,它不同于内置锁, 它在每次使用都需要显示的加锁和解锁, 而且提供了更高级的特性:公平锁, 定时锁, 有条件锁, 可轮询锁, 可中断锁. 可以有效避免死锁的活跃性问题 Loc...
    2019-01-18 03:21:15 | Concurrency
  • JCIP-35-并发程序的测试
    并发程序的测试 编写并发程序时候,可以采取和串行程序相同的编程方式。唯一的难点在于,并发程序存在不确定性,这种不确定性会令程序出错的地方远比串行程序多,出现的方式也没有固定规则。这对程序的应用会造成一些困难,那么如何在测试中,尽可能的暴露出这些问题,并且了解其性能瓶颈,这也是对开发者带来新的挑战。 本篇基于多线程知识,梳理一些多线程测试需要掌握的方法和原则,以期望可能的在开发阶段,就暴露...
    2019-01-18 03:21:15 | Concurrency
  • JCIP-34-性能与可伸缩性
    概述 编写正确的程序很难,而编写正确的并发程序则难上加难。与串行程序相比,在并发程序中存在更多容易出错的地方。 那么,为什么还要编写并发程序? 线程是Java语言中不可或缺的重要功能,它们能使复杂的异步代码变得更简单,从而极大地简化了复杂系统的开发。此外,要想充分发挥多处理器系统的强大计算能力,最简单的方式就是使用线程。随着处理器数量的持续增长,如何高效地使用并发正变得越来越重要。 ...
    2019-01-18 03:21:15 | Concurrency
  • JCIP-33-Dead Lock-死锁
    导读 是什么? 产生的条件? 常见的场景? 如何发现和分析?如何避免? 总结和分析 死锁 是什么 线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。 当线程进入对象的synchronized代码块时,便占有了资源,直到它退出该代...
    2019-01-18 03:21:15 | Concurrency
  • JCIP-32-线程池的使用
    线程池调优的必要性 在标准的Executor实现中,当执行需求较低时将回收空闲线程,而当需求增加时将添加新的线程,并且如果从任务中抛出了未检查异常,那么将用一个新的工作者线程替代抛出异常的线程。 只有当线程本地值的生命周期受限于任务的生命周期时,在线程池中的线程使用ThreadLocal才有意义,而在线程池的线程中不应该使用ThreadLocal在任务之间传递值。 只有当任务都是同类型...
    2019-01-18 03:21:15 | Concurrency
  • JCIP-30-任务的关闭与取消
    java 对于终止线程的考虑 Java没有提供任何机制来安全地(抢占式方法)终止线程, 虽然Thread.stop和suspend等方法提供了这样的机制,但是由于存在着一些严重的缺陷,因此应该避免使用。 但它提供了中断Interruption机制,这是一种协作机制,能够使一个线程终止另一个线程的当前工作。 一、取消 取消操作的原因 用户请求取消 ...
    2019-01-18 03:21:15 | Concurrency
  • JCIP-29-Executor 框架小结
    jdk8 以后的多线程处理 集合进行并行计算有两种方式:并行流和CompletableFutures。 并行流 计算密集型操作,并且没有I/O,推荐使用Stream接口。因为实现简单,同时效率也可能是最高的(如果所有的线程都是计算密集型的,那就没有必要创建比处理器核数更多的线程); CompletableFutures 如果并行的工作单元还涉及等待I/O的操作(包括网络连接等待),...
    2019-01-18 03:21:15 | Concurrency