CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待
CyclicBarrier 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。
这是JAVA1.5中的2个帮助类,他们2都是直接继承java.lang.Object的,目的是为了让线程之间的相互等待变得简单。
CountDownLatch的用法如下(CyclicBarrier要更加简单一些而且更加强大一些,用法参看
http://www.iteye.com/topic/1116068之前写的一个测试)
package thread.concurrent.CountDownLatch;
import java.util.AbstractQueue;
import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.CountDownLatch;
/**
* CountDownLatch:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
* 用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,
* await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。
* 这种现象只出现一次——计数无法被重置。如果需要重置计数,请考虑使用 CyclicBarrier。
*/
public class CountDownLatchTest {
public static void main(String[] args) throws InterruptedException {
int threadCount = 10;
CountDownLatch beginSingle = new CountDownLatch(1);
CountDownLatch endSingle = new CountDownLatch(threadCount);
AbstractQueue<SportsMan> queue = new ArrayBlockingQueue<SportsMan>(
threadCount);
for (int i = 0; i < threadCount; i++) {
new Thread(new WorkThread(queue, beginSingle, endSingle)).start();
}
beginSingle.countDown();//②枪响
endSingle.await();//③使当前线程等待,直到endSingle计数器递减到0才放开
System.out.println("统计成绩:" + queue);
}
}
//每个线程代表一个运动员
class WorkThread implements Runnable {
AbstractQueue<SportsMan> queue;
CountDownLatch countDownLatch;
CountDownLatch endSingle;
public WorkThread(AbstractQueue<SportsMan> queue,
CountDownLatch countDownLatch, CountDownLatch endSingle) {
super();
this.queue = queue;
this.countDownLatch = countDownLatch;
this.endSingle = endSingle;
}
public void run() {
try {
countDownLatch.await();//①运动员各就各位
int time = (new Random()).nextInt(10);
System.out.println("线程:" + Thread.currentThread().getName() + "用时:"
+ time);
queue.add(new SportsMan(Thread.currentThread().getName(), time));
endSingle.countDown();//③每次有人跑到终点,则结束计数器递减,当结束计数器递减到0也就是所有人都跑完了就进行成绩统计。
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 运动员类
class SportsMan {
String name;
Integer time;
public SportsMan(String name, Integer time) {
super();
this.name = name;
this.time = time;
}
public String toString() {
return "{name:" + name + ",time:" + time + "}";
}
}
分享到:
相关推荐
CountDownLatch的使用可以使得多线程程序设计变得更加简单和易于控制。 CountDownLatch的实现: CountDownLatch的实现非常简单,jdk中CountDownLatch类有一个常用的构造方法:CountDownLatch(int count);两个常用...
如何使用CountDownLatch同步java多线程 CountDownLatch 是 Java 并发编程中的一种常用工具,用于控制多个线程的并发执行。它可以实现多个线程之间的同步操作,使得线程之间可以协调工作,避免了线程之间的互相干扰...
在编程领域,多线程是实现并发执行任务的关键技术,特别是在服务器端开发和高并发应用中,多线程能够充分利用CPU资源,提高程序的运行效率。这个名为"多线程demo程序-轻松掌握多线程技术"的项目,旨在帮助开发者理解...
5. 状态对象模式:用于在多线程中同步访问对象的状态,例如CountDownLatch、CyclicBarrier和Semaphore等并发工具类,它们可以帮助我们控制线程间的同步和协作。 6. 同步适配器模式:通过包装已有的线程不安全的类,...
5. **并发集合与并发工具类**:Java提供了一系列并发友好的集合,如ConcurrentHashMap、CopyOnWriteArrayList等,以及并发工具类如CountDownLatch、CyclicBarrier和Phaser,它们用于协调多线程间的协作。 6. **异常...
- java.util.concurrent包则提供了一些高级的并发编程工具,如Executor框架、CountDownLatch、CyclicBarrier、Phaser等,用于简化多线程编程。 通过以上内容的学习,Java程序员不仅能够理解线程的概念和重要性,...
线程安全是多线程编程中的另一个重要概念,指在多线程环境下,类的行为不会因线程的并发执行而变得不确定。Java提供了一些线程安全的数据结构,如ArrayList不是线程安全的,但它的替代品Vector和...
在Android开发中,为了提升用户体验,尤其是在处理大文件下载时,多线程技术的应用变得尤为重要。本篇文章将详细探讨如何在Android中实现多线程下载功能,并涉及断点续传技术,以确保下载的高效性和可靠性。我们还将...
- **充分利用多处理器系统**:随着多处理器系统的普及,多线程编程变得更加重要。多线程可以让程序更好地利用多核处理器的性能,实现真正的并行处理。 - 例如,在多处理器系统中,不同的线程可以在不同的 CPU 上...
这些工具类提供了更高级别的同步原语,使得多线程编程变得更加便捷。 最后,Java的并发API自Java 5以来得到了显著增强,包括java.util.concurrent包下的许多类和接口。这些API的设计理念是提高并发性能,减少资源...
然而,随着Java 5的发布,一系列新特性如线程池、原子量、锁等的引入,使得Java在多线程领域变得更为强大,与其他编程语言相比,其多线程处理能力显著提升。 #### 二、Java线程的基础概念 - **进程与线程**:进程...
Java5之前的版本虽然支持多线程,但在语言层面的支持较为有限,这使得编写复杂的多线程程序变得非常具有挑战性。然而,随着Java5及后续版本的发布,Java引入了一系列强大的多线程特性和工具,极大地增强了多线程编程...
例如,在JDK 1.5中引入了新的并发API,并在后续版本中持续改进和优化了这些并发工具,使得Java并发编程变得更加简便和安全。 总之,Java多线程编程极大地增强了程序处理并发任务的能力,但是在享受多线程带来的好处...
Java多线程编程是Java平台的...随着Java技术的发展,如Java 5及以后版本引入的新特性,多线程编程变得更加灵活和强大。在实际开发中,根据具体需求选择合适的同步机制和线程管理方式,能够显著提升程序性能和可维护性。
在多线程环境下,Spring4提供了一套完善的上下文管理机制,使得线程安全的bean管理变得更加简单。 2. **Junit4.8**:JUnit4.8是一个针对Java的单元测试框架,它的主要特性包括注解(@Test)、参数化测试、异常断言...
Java提供了丰富的API来支持多线程编程,如`Thread`类和`ExecutorService`接口,使得创建和管理线程变得更加便捷和高效。 并发编程的核心挑战在于处理线程间的交互和同步问题。这包括共享数据的安全访问、避免竞态...
Java 5之后引入的java.util.concurrent包中提供了一系列的并发工具类,如`CountDownLatch`、`CyclicBarrier`、`Semaphore`、`Exchanger`等,使得多线程编程变得更加高效和安全。 以上知识点只是Java多线程技术中的...
综上所述,`java.util.concurrent`包为Java开发者提供了丰富的并发编程工具,使得在多线程环境下开发高性能、高可靠性的应用变得更加简单和高效。通过合理利用这些工具,可以有效解决并发编程中常见的问题,如资源...
# Java中的CyclicBarrier类最全讲义 ...总之,`CyclicBarrier`是一个非常强大的并发工具,能够有效地帮助实现多线程间的同步和协作。通过合理的设计和使用,可以极大地提升程序的并发性能和可靠性。