`

多线程之计数器CountDownLatch来控制线程的顺序

    博客分类:
  • java
阅读更多

 

/**
 * 线程等待,类似线程join的作用
 * 假设3个线程:2个T1与1个T2, T1执行完之后, T2再执行
 * 除了可以使用join控制线程的执行顺序,还可以使用CountDownLatch控制线程的先后顺序
 */
public class CountDownLatchTest {
 private AtomicInteger total;
 CountDownLatch latch = new CountDownLatch(2);

 public static void main(String[] args) {
  CountDownLatchTest o = new CountDownLatchTest();
  T1 t1 = o.new T1("t1");
  T1 t2 = o.new T1("t2");
  T2 t3 = o.new T2("t3");
  
  t1.start();
  t3.start();
  t2.start();
 }

 class T1 extends Thread{
  public T1(String name) {
   super(name);
  }
  
  public void run() {
   System.out.println(this.getName() + "  " + System.currentTimeMillis());
   try {
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   latch.countDown();
  }
 }
 
  class T2 extends Thread{
  public T2(String name) {
   super(name);
  }
  
  public void run() {
   try {
    latch.await(); //等待2个T1线程执行完(阻塞直到计数为0)
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   System.out.println(this.getName() + "  " + System.currentTimeMillis());
  }
 }
}

分享到:
评论

相关推荐

    多线程countDownLatch方法介绍

    在Java多线程编程中,CountDownLatch是一个非常重要的同步工具类,它可以帮助我们协调多个线程之间的交互。本文将深入探讨CountDownLatch的工作原理、使用场景以及相关源码分析。 CountDownLatch是一个计数器,初始...

    利用 CountDownLatch 类实现线程同步

    在多线程编程中,确保一组操作按照特定的顺序或者所有操作都完成后再进行下一步是常见的需求。Java 提供了多种工具来实现这样的同步机制,其中之一便是 `CountDownLatch` 类。`CountDownLatch` 是一个计数器,可以...

    浅谈java并发之计数器CountDownLatch

    总的来说,CountDownLatch是Java并发编程中的一种重要工具,通过它可以实现线程间的协作,确保特定操作在所有线程完成后再进行,有效地解决了多线程间的同步问题。正确理解和使用CountDownLatch能够提高程序的效率和...

    多线程并行执行,汇总结果

    综上所述,多线程并行执行是提升程序性能的重要手段,而`CountDownLatch`和线程安全的数据结构则为在多线程环境中控制执行顺序和保证数据一致性提供了有力支持。理解并熟练运用这些工具和技术,对于开发高效、可靠的...

    Java多线程编程之CountDownLatch同步工具使用实例

    总的来说,Java的CountDownLatch是实现多线程同步的有效工具,它可以帮助开发者在复杂并发场景下控制线程的执行流程,确保程序的正确性和一致性。在实际开发中,根据需求选择合适的同步工具,如Semaphore(信号量)...

    详解Java多线程编程中CountDownLatch阻塞线程的方法

    在Java多线程编程中,CountDownLatch扮演着“共享锁”的角色,类似于读写锁中的ReadLock,其核心功能是通过一个计数器来控制线程的执行流程。 CountDownLatch的构造函数接收一个整数参数,这个参数即为计数器的初始...

    java使用CountDownLatch等待多线程全部执行完成

    Java 使用 CountDownLatch 等待多线程全部执行完成 CountDownLatch 是 Java 中的一个同步工具类,允许一个或多个线程等待其他线程完成操作。它的应用场景非常广泛,例如在处理大量数据时,可以使用多线程的方式处理...

    多线程,高并发.zip

    在IT领域,多线程和高并发是两个关键概念...总的来说,多线程和高并发是Java程序员必须掌握的核心技术。通过合理利用Java提供的多线程机制和并发工具,可以设计出高性能、可扩展的应用,满足大规模用户并发访问的需求。

    java10个线程按照顺序打印1-100

    在Java编程中,多线程同步是一个常见的挑战,特别是在需要线程按照特定顺序执行任务时。本主题聚焦于如何使用Java实现10个线程按照顺序打印数字1到100。这种问题通常通过线程间通信和同步机制来解决,如`...

    多线程demo/java多线程练习

    - **CountDownLatch**:常用于多线程间的同步,计数器从正整数开始,每当一个线程完成任务,计数器减一,当计数器为零时,所有等待的线程将被释放。 - **CyclicBarrier**:允许一组线程等待彼此到达某个屏障点,...

    精通java多线程

    理解这些状态有助于我们更好地控制和调试多线程程序。 四、线程同步 线程同步是防止多个线程同时访问共享资源导致数据不一致的重要机制。Java提供了多种同步工具,如synchronized关键字、Lock接口(ReentrantLock、...

    Java多线程编程实战指南-核心篇

    Java的多线程能力是其强大之处,使得开发者能够在同一时间执行多个任务,提高程序效率。本指南将通过实例分析和实践演练,让你深入理解多线程的原理与应用。 首先,我们要了解Java中的线程模型。Java通过Thread类来...

    多线程资源共享集合

    `synchronized`关键字是Java中用来控制多线程并发访问共享资源的一种机制。它提供了互斥访问,确保同一时间只有一个线程可以执行特定代码块。`synchronized`可以修饰方法或者代码块,当一个线程进入`synchronized`...

    java多线程示例

    在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应速度。本示例着重探讨如何在Java中实现和管理多线程,以及它带来的挑战和解决方案。 一、Java多线程基础 1. ...

    MulThreadSQLiteTest多线程操作数据库

    6. **性能优化**:在多线程环境下,合理规划读写操作的顺序和数量,以及使用索引优化查询,能显著提升数据库操作的效率。例如,避免在查询条件中使用未索引的列,以减少全表扫描。 在"MulThreadSQLiteTest"这个项目...

    多线程计数实现多线程执行后再执行主线程

    通过以上分析,我们可以看到使用`CountDownLatch`来协调多线程执行顺序是一种非常有效的方式。这种方式不仅能够简化程序设计,还能够提高系统的稳定性和健壮性。在实际项目开发中,合理地利用这种技术可以有效地解决...

    java 多线程简易聊天 精简版

    Java多线程技术是编程领域中的重要概念,尤其在...对于希望深入学习Java多线程编程的开发者来说,这是一个很好的实践项目,可以通过它来提升自己的技能,并在此基础上扩展更多的功能,如添加加密通信、用户身份验证等。

    Java中多线程同步类 CountDownLatch

    Java中的CountDownLatch是一种多线程同步工具类,它在并发编程中扮演着重要角色,尤其在需要等待一组任务完成后再进行下一步操作的场景下。CountDownLatch的命名来源于其功能,"count down"意味着计数器向下递减,...

    java中的多线程实例详解(自己去运行看结果)

    在Java中,线程是程序的单一顺序控制流,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈和一部分堆内存。一个进程可以包含多个线程,它们共享同一块内存空间,通过同步机制避免数据竞争。 创建Java线程有多种...

    JAVA线程高级-线程按序交替执行

    在Java编程中,多线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而提高了系统的效率和响应性。然而,在某些场景下,我们可能需要控制线程的执行顺序,确保它们按照特定的顺序交替运行,这在并发编程...

Global site tag (gtag.js) - Google Analytics