import java.util.concurrent.CountDownLatch;
/**
* CountDownLatch 闭锁演示
* 闭锁的作用相当于一扇门:在闭锁到达结束状态(getCount()=0)前,这扇门一直是关闭的,并且没有任何线程能通过。
* 当到达结束状态时,这扇门会打开并允许所有的线程通过(可以继续执行await()之后的代码)。
* 当闭锁到达结束状态后,将不会再改变状态,因此这扇门将永远保持打开状态。
* **/
public class TestHarness {
public long timeTasks(int nThreads, final Runnable task)
throws InterruptedException{
final CountDownLatch startGate = new CountDownLatch(1);
final CountDownLatch endGate = new CountDownLatch(nThreads);
for(int i = 0; i < nThreads; i++){
Thread thread = new Thread(){
public void run(){
try {
System.out.println("Before:S="+startGate.getCount()+" E="+endGate.getCount());
startGate.await();//使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。
System.out.println("After:S="+startGate.getCount()+" E="+endGate.getCount());
try {
System.out.println("task run!");
task.run();
} finally{
System.out.println("End Gate countDown()");
endGate.countDown();
}
} catch (InterruptedException e) {}
}
};
thread.start();
}
long start = System.nanoTime();//返回最准确的可用系统计时器的当前值,以毫微秒为单位。
System.out.println("开启启动门!");
startGate.countDown();//递减锁存器的计数,如果计数到达零,则释放所有等待的线程。
endGate.await();//使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。
System.out.println("End Gate await()");
long end = System.nanoTime();
return end-start;
}
public static void main(String[] args) {
MyThread thread=new MyThread("线程A");
TestHarness testHarness = new TestHarness();
try {
long time = testHarness.timeTasks(10, thread);
System.out.println("It's cost time:"+time);
} catch (Exception e) {
System.out.println("Exception Accured!");
}
}
}
分享到:
相关推荐
本文将详细介绍如何利用MyBatis结合多线程和CountDownLatch闭锁来实现数据的批量插入。 首先,我们来看`mybatis批处理`。MyBatis的批处理功能允许我们在一次数据库连接中执行多条SQL语句,从而减少了数据库连接的...
在Java多线程编程中,CountDownLatch是一个非常重要的同步工具类,它可以帮助我们协调多个线程之间的交互。本文将深入探讨CountDownLatch的工作原理、使用场景以及相关源码分析。 CountDownLatch是一个计数器,初始...
在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具类,它们用于协调多个线程间的协作。这两个工具都是在`java.util.concurrent`包下,是Java并发库的重要组成部分。 **CountDownLatch** ...
Java 提供了多种工具来实现这样的同步机制,其中之一便是 `CountDownLatch` 类。`CountDownLatch` 是一个计数器,可以用于协调多个线程间的活动,等待所有线程完成各自的任务后,主线程或其他线程才能继续执行。 ...
CountDownLatch是Java并发编程中一个重要的工具类,它属于java.util.concurrent包下的一个同步辅助类。这个类的设计目的是允许一个线程等待其他多个线程完成操作,然后再继续执行。CountDownLatch通常用于多线程协作...
CountDownLatch是Java并发编程中一个重要的同步工具类,它允许一个或多个线程等待其他线程完成操作。这个工具在多线程环境下的并行处理和协调中扮演着关键角色。 **CountDownLatch是什么?** CountDownLatch是一个...
主线程必须在启动其他线程后立即调用 CountDownLatch.await()方法,其他 N 个线程必须引用闭锁对象,因为他们需要通知 CountDownLatch 对象,他们已经完成了各自的任务。 在实际开发中,CountDownLatch 可以用来...
java并发编程中CountDownLatch和CyclicBarrier的使用借鉴 java并发编程中CountDownLatch和CyclicBarrier是两个非常重要的线程控制和调度工具,经常被用于解决多线程程序设计中的线程等待问题。本文将对...
递减锁存器CountDownLatch的使用以及注意事项!
CountDownLatch与thread.join()的区别
CountDownLatch 是 Java 多线程并发编程中一个重要的同步工具类,主要用来协调多个线程间的协作,确保某个任务在所有线程完成之前不会开始。在这个"CountDownLatch Demo"中,我们将深入理解 CountDownLatch 的原理、...
CountDownLatch 是 Java 中的一个同步工具类,位于 `java.util.concurrent` 包下,它主要用于多线程间的协作,尤其在需要等待所有线程执行完指定任务后才能继续执行的情况。这个类通过一个计数器(计数down)来实现...
《CountDownLatch实战解析与源码探索》 CountDownLatch是Java并发编程中一个非常重要的同步工具类,它在多线程协作场景中起到了关键的作用。在`countdownlatch-example-sourcecode.zip`这个压缩包中,我们可以看到...
尚硅谷_JUC线程高级_CountDownLatch 闭锁 ·6. 实现 Callable 接口 ·7. 尚硅谷_JUC线程高级_同步锁 Lock ·8. 尚硅谷_JUC线程高级_生产者消费者案例-虚假唤醒 ·9. 尚硅谷_JUC线程高级_Condition 线程通信 ·10. ...
在Java的并发编程中,CountDownLatch和CyclicBarrier是两个非常重要的同步工具,它们用于协调多个线程的执行顺序。本文将详细介绍CountDownLatch和CyclicBarrier的工作原理、使用场景以及如何在实际项目中应用它们。...
JAVA多线程CountDownLatch使用详解 JAVA多线程CountDownLatch是JAVA多线程编程中的一种同步工具,主要用来让某个线程等待其他线程执行完毕后再继续执行。下面我们将详细介绍JAVA多线程CountDownLatch的使用和原理。...
当计数器值为 0 时,说明所有的工作线程都执行完了,此时,在闭锁上等待的主线程就可以恢复执行任务。 应用场景:倒数计时器,例如火箭发射前检查设备、仪器的场景。 Semaphore Semaphore 是一个限流工具类,用于...
Java中CountDownLatch进行多线程同步详解及实例代码 CountDownLatch是Java中的一种多线程同步辅助类,主要用来同步多个任务的执行。它允许一个或多个线程等待,直到一组正在其他线程中执行的操作完成。下面是对...
在Java并发编程中,`CountDownLatch`是一个非常重要的工具类,它位于`java.util.concurrent`包下,用于协调多个线程间的同步。`CountDownLatch`的主要作用是允许一个或多个线程等待其他线程完成操作。在上述例子中,...
CountDownLatch是Java并发编程中一个重要的工具类,用于协调多线程间的同步。它由Java并发包`java.util.concurrent`提供,主要用于解决一种场景:在主控线程等待多个子线程完成各自任务后再继续执行的情况。下面我们...