1. JVM - jstack工具

    jstack是JDK中自带的Java工具之一,用于生成虚拟机当前时刻的线程快照,含有正在执行的方法堆栈的集合信息, 生成线程快照的主要目的是定位线程出现长时间停顿的原因, 如线程间死锁、死循环、请求外部资源导致的长时间等待等问题。

    2021/07/29 JVM

  2. Java并发 - 锁分类

    锁概述 线程安全问题的产生前提是多个线程并发访问共享变量、共享资源(以下统称为共享数据)。 那么一种保障线程安全的方法是将多个线程对共享数据的并发访问转换为串行访问,即一个共享数据一次 只能被一个线程访问,该线程访问结束后其他线程才能对其进行访问。锁(Lock)就是利用这种思路以保障 线程安全的线程同步机制。

    2021/07/29 concurrent

  3. Java并发 - volatile 实现原理

    在多线程并发编程中 synchronized 和 volatile 都扮演着重要的角色,volatile 是轻量级的 synchronized,它在多处理器开发中保证了共享变量的”可见性”。可见性的意思是当一个线程修改一个 共享变量时,另外一个线程能读到这个修改的值。如果 volatile 变量修饰符使用恰当的话,它比 synchronized 的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。但是,volatile 不能保证原子性。

    2021/07/29 concurrent

  4. Java并发 - synchronized 关键字

    在多线程并发编程中 synchronized 一直是元老级角色,很多人都会称呼它为重量级锁。但是,随着 Java SE 1.6 对 synchronized 进行了各种优化之后,有些情况下它就并不那么重了。本文详细介绍 Java SE 1.6 中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构 和升级过程。

    2021/07/29 concurrent

  5. Java并发 - 并发设计模式

    在软件工程中,设计模式是针对某一类共同问题的解决方案。这种解决方案被多次使用,而且已 经被证明是针对该类问题的最优解决方案。每当你需要解决这其中的某个问题,就可以使用它们来避 免做重复工作。其中,单例模式(Singleton)和工厂模式(Factory)是几乎每个应用程序中都要用到 的通用设计模式。 并发处理也有其自己的设计模式。本节,我们将介绍一些最常用的并发设计模式,以及它们的 Java 语言实现。

    2021/07/27 concurrent

  6. Java并发 - 并发数据结构

    Java API 中的常见数据结构(例如 ArrayList、Hashtable 等)并不能在并发应用程序中使用,除非采用某种外部同步机制。但是如果你采用了某种同步机制,应用程序就会增加大量的额外计算时 间。而如果你不采用同步机制,那么应用程序中很可能出现竞争条件。如果你在多个线程中修改数据, 那么就会出现竞争条件,你可能会面对各种异常(例如 ConcurrentModificationException 和 ArrayIndexOutOfBoundsException),出现隐性数据丢失,或者应用程序会陷入死循环。

    2021/07/27 concurrent

  7. Java并发 - 并行流

    流和 lambda 表达式可能是 Java 8 中最重要的两个新特性。流已经被增加为 Collection 接口和 9 其他一些数据源的方法,它允许处理某一数据结构的所有元素、生成新的结构、筛选数据和使用 MapReduce 方法来实现算法。

    2021/07/27 concurrent

  8. Java并发 - Fork/Join 框架

    Fork/Join 框架定义了一种特殊的执行器,尤其针对采用分治方法进行求解的问题。针对解决这类 问题的并发任务,它还提供了一种优化其执行的机制。Fork/Join 是为细粒度并行处理量身定制的,因 为它的开销非常小,这也是将新任务加入队列中并且按照队列排序执行任务的需要。该框架涉及的主 要类和接口如下。

    2021/07/27 concurrent

  9. Java并发 - 执行器

    执行器框架是在实现并发任务时将线程的创建和管理分割开来的一种机制。你不必担心线程的创 建和管理, 只需要关心任务的创建并且将其发送给执行器。执行器框架另一个重要的优势是 Callable接口。它类似 于 Runnable 接口,但是却提供了两方面的增强: 这个接口的主方法名称为 call() ,可以返回结果。 当发送一个 Callable 对象给执行器时,将获得一个实现了 Future 接口的对象。可以使用这个对象 来控制 Callable 对象的状态和结果。

    2021/07/27 concurrent

  10. Java并发 - 同步机制

    下面是最重要的同步机制

    2021/07/27 concurrent