CountDownLatch 介绍

package com.karl.example;

import java.util.concurrent.CountDownLatch;

/**
 * Created by karl.
 */
public class CountDownLatchExample {
    public static class Task implements Runnable{
        private String name;
        private CountDownLatch latch;
        private Long timeToStart;

        public Task(String name, Long timeToStart, CountDownLatch latch){
            this.name = name;
            this.latch = latch;
            this.timeToStart = timeToStart;
        }

        @Override
        public void run() {
            try {
                Thread.sleep(timeToStart);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println( name + " is Up");
            latch.countDown(); //计数器减1

        }
    }

    public static void main(String[] args) {
        CountDownLatch latch = new CountDownLatch(3);
        Thread t1 = new Thread(new Task("Thread 1",1000L,latch));
        Thread t2 = new Thread(new Task("Thread 2",1000L,latch));
        Thread t3 = new Thread(new Task("Thread 3",1000L,latch));
        Thread t4 = new Thread(new Task("Thread 4",1000L,latch));
        Thread t5 = new Thread(new Task("Thread 5",1000L,latch));
        Thread t6 = new Thread(new Task("Thread 6",1000L,latch));
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        t5.start();
        t6.start();
        try {
            latch.await();
            System.out.println("at least 3 thread startup,application is starting now");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

结果:

Thread 2 is Up
Thread 1 is Up
Thread 3 is Up
Thread 4 is Up
at least 3 thread startup,application is starting now
Thread 5 is Up
Thread 6 is Up
时间: 2024-10-13 16:21:43

CountDownLatch 介绍的相关文章

CountDownLatch在多线程程序中的应用

一.CountDownLatch介绍 CountDownLatch是JDK1.5之后引入的,存在于java.util.concurrent包下,能够使一个线程等待其他线程完成动作后再执行.构造方法: 1 public CountDownLatch(int count) { 2 if (count < 0) throw new IllegalArgumentException("count < 0"); 3 this.sync = new Sync(count); 4 } 主

CountDownLatch源码解析

一.CountDownLatch介绍 CountDownLatch是在jdk1.5被引入的,它主要是通过一个计数器来实现的,当在初始化该类的构造函数时,会事先传入一个状态值,之后在执行await方法后, 在这个状态值为0之前,当前线程(指的是调用await的线程)会一直等待.它内部使用了AQS来实现的,且是共享锁,具体怎么实现,待会看看它的实现原理. 它的应用场景: 一般在于在执行当前线程之前,要完成n个线程的任务,才能执行当前线程.这种场景适合用countdownLatch. 二.源码解析 先

JMM以及并发三大特性介绍(包括解决方案)

JMM结构图: JMM对同步的8种操作: JMM的同步规则: Countdownlatch介绍: 该类功能是可以阻塞线程,并在保证线程满足特定条件下,继续执行.如上图,Countdownlatch的cnt初始值是3,线程A调用await()方法,会阻塞,t1,t2,t3每次执行会将cnt-1,然后继续执行.直到cnt的值为0,则TA继续执行. 假设只有两个车道,同一地点,只能同时有两辆车通过,即并发就是两个.Semaphore优势是可以控制同一时间,线程的并发量. 原子性介绍: 先看看jdk中a

多线程(十二、AQS原理-CountDownLatch基于AQS的共享实现)

1.CountDownLatch介绍 1.1 CountDownLatch的使用,请参考文章 多线程(七.同步计数器-CountDownLatch 2.案例分析 2.1 说明: 1.Thread-1执行await,等待主线程放行;2.Thread-2执行await,等待主线程放行:3.主线程执行countDown()放行. 3.源码分析 3.1 CountDownLatch的构造函数和如何使用AQS的同步状态: 1.CountDownLatch的初始计数器就是直接设置AQS的同步状态值state

Java CountDownLatch 使用与案例测试

一.CountDownLatch介绍: * CountDownLatch是一种java.util.concurrent包下一个同步工具类; * CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行. * public void countDown() 锁存器的计数减1; * public boolean await(long timeout,TimeUnit unit) 使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断或超出了指定的等待时间. 二.应用

Thread多线程速查手册

常用概念线程安全停止线程守护线程多线程通讯锁Synchornized悲观锁乐观锁共享锁/独占锁读写锁的机制死锁LockReentrantLockConditionCountDownLatchCyclicBarrier信号量SemaphoreThreadLocal高并发线程安全与不安全的类不安全的spring与多线程线程池介绍线程池的优点线程池工作过程常用方法基本使用阻塞队列 toc 常用概念 线程状态 新建状态.就绪状态.运行状态.阻塞状态及死亡状态. 新建状态: 当用new操作符创建一个线程时

java CountDownLatch 使用介绍

CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier.Semaphore.ConcurrentHashMap和BlockingQueue,它们都存在于java.util.concurrent包下.CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行.例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行.CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的

Java并发编程高级内容介绍

计数器:CountDownLatch CountDownLatch类似于一个计数器,和Atomic类比较相近,操作是原子的,即多个线程同时只能有一个可以去操作.CountDownLatch对象设置一个初始的数字作为计数值,任何调用这个对象上的await()方法都会阻塞,直到这个计数器的计数值被其他的线程调用countDown()减为0为止.典型的应用场景就是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行.例如在Zookeeper的使用过程中,由于客户端与服务器建立连

CountDownLatch

CountDownLatch 1.类介绍 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待.用给定的计数 初始化 CountDownLatch.由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞.之后,会释放所有等待的线程,await 的所有后续调用都将立即返回.这种现象只出现一次——计数无法被重置. 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行 2.使用场景 在一些应用场合中,需要等待某个条件