concurrency

  • Java 并发基础(五):面试实战之多线程顺序打印

    Java 并发基础(五):面试实战之多线程顺序打印

    你好,我是看山。

    来个面试题,让大家练练手。这个题在阿里和小米都被问过,所以放在这个抛砖引玉,期望能够得到一个更佳的答案。

  • Java 并发基础(一):synchronized 锁同步

    Java 并发基础(一):synchronized 锁同步

    你好,我是看山。

    synchronized 是 java 内置的同步锁实现,一个关键字实现对共享资源的锁定。synchronized 有 3 种使用场景,场景不同,加锁对象也不同:

    1. 普通方法:锁对象是当前实例对象
    2. 静态方法:锁对象是类的 Class 对象
    3. 方法块:锁对象是 synchronized 括号中的对象

  • Java 并发基础(二):主线程等待子线程结束

    Java 并发基础(二):主线程等待子线程结束

    你好,我是看山。

    在很多时候,我们期望实现这么一种功能:在主线程中启动一些子线程,等待所有子线程执行结束后,主线程再继续执行。比如:老板分配任务,众多工人开始工作,等所有工人完成工作后,老板进行检查。

    解决方法分析:

    1. 主线程通过 join 等待所有子线程完成后,继续执行;
    2. 主线程知道子线程的数量、未完成子线程数量,主线程等待所有子线程完成后,才继续执行。

  • Java 并发基础(三):再谈 CountDownLatch

    Java 并发基础(三):再谈 CountDownLatch

    你好,我是看山。

    java.util.concurrent.CountDownLatch 是 JDK 1.5 提供的一个同步辅助类:在一组正在其他线程中的操作执行完成之前,它允许一个或多个线程一直等待。

    初始化 CountDownLatch 时需要指定计数。通过调用 countDown 方法使当前计数到达零之前,await 方法会一直阻塞。之后,所有等待的线程会被释放,await 后面的操作也会立即执行。因为计数无法被重置,所以这种操作只会出现一次。如果需要重置计数,请考虑使用 java.util.concurrent.CyclicBarrier。

  • Java 并发基础(四):再谈 CyclicBarrier

    Java 并发基础(四):再谈 CyclicBarrier

    你好,我是看山。

    java.util.concurrent.CyclicBarrier 也是 JDK 1.5 提供的一个同步辅助类(为什么用也呢?参见 再谈 CountDownLatch),它允许一组线程互相等待,直到到达某个临界点(a common barrier point,翻译成公共障碍点、公共栅栏点都不够传神,直接用临界点吧)。在某个程序中,一组固定大小的线程必须互相等待时,CyclicBarrier 将起很大的作用。因为在等待线程被释放后,这个临界点可以重用,所以说是循环的。