import java.util.concurrent.CountDownLatch;
class Aworker implements Runnable {
private int num;
private CountDownLatch begin;
private CountDownLatch end;
public Aworker(int num, final CountDownLatch begin, final CountDownLatch end) {
this.num = num;
this.begin = begin;
this.end = end;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
System.out.println(num + "th people is ready");
begin.await();
//准备就绪
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
end.countDown();
//计数器减一,到达终点
System.out.println(num + "th people arrive");
}
}
}
public class Race {
public static void main(String[] args) {
int num = 10;
CountDownLatch begin = new CountDownLatch(1);
CountDownLatch end = new CountDownLatch(num);
for (int i = 1; i <= num; i++) {
new Thread(new Aworker(i, begin, end)).start();
}
try {
Thread.sleep((long) (Math.random() * 5000));
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("judge say : run !");
begin.countDown(); //裁判一声令下开始跑
long startTime = System.nanoTime();
try {
end.await(); //等待结束
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
long endTime = System.nanoTime();
System.out.println("judge say : all arrived !");
System.out.println("spend time: " + (endTime - startTime));
}
}
}
相关推荐
第1章 简介 1.1 并发简史 1.2 线程的优势 1.2.1 发挥多处理器的强大能力 1.2.2 建模的简单性 1.2.3 异步事件的简化处理 1.2.4 响应更灵敏的用户界面 1.3 线程带来的风险 1.3.1 安全性问题 1.3.2 活跃性...
第1章 简介 1.1 并发简史 1.2 线程的优势 1.2.1 发挥多处理器的强大能力 1.2.2 建模的简单性 1.2.3 异步事件的简化处理 1.2.4 响应更灵敏的用户界面 1.3 线程带来的风险 1.3.1 安全性问题 1.3.2 活跃性...
Java并发编程中的闭锁是一种同步工具类,它用于协调多个线程之间的操作顺序,确保一组操作在所有线程完成之前不会继续。闭锁的核心概念是一个内部计数器,初始值为一个正整数,表示需要等待的事件数量。当这个计数器...
Java并发编程 背景介绍 并发历史 必要性 进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 ...
在Java并发编程中,闭锁和栅栏是两种重要的同步工具,它们可以帮助开发者在多线程环境下控制线程的执行顺序和同步。本篇文章将详细解释这两种机制,并通过实例代码进行演示。 一、闭锁(CountDownLatch) 闭锁,由...
JAVA并发编程实践-构建执行程序块-学习笔记 JAVA并发编程实践是指在JAVA编程语言中,使用多线程、并发编程来实现高效、可靠的程序执行。构建执行程序块是指在并发编程中,使用线程安全的类来管理状态,以确保程序的...
### Java并发编程基础知识点 #### 一、线程与线程状态 - **线程基本概念**: - 在Java中,线程是程序执行流的最小单元,它由一个线程体(实现Runnable接口或者继承Thread类)和数据组成。 - **线程创建**:可以...
Java并发工具包(J.U.C)是Java编程语言中用于并发编程的一系列工具包的统称,它包含了一系列方便实现多线程编程的类和接口,使得开发者可以更加方便地编写高效、线程安全的程序。本文将深入浅出地探讨J.U.C的原理和...
并发编程是计算机科学中的关键领域,特别是在多核处理器和分布式系统中,它允许程序同时执行多个任务,提高系统的效率和响应性。以下是一些关于并发编程的重要知识点: ### 第一章 线程基础、共享与协作 1. **进程...
Java并发编程中的栅栏(CyclicBarrier)是一个同步辅助类,它允许一组线程等待彼此到达某个特定点,然后一起继续执行。这个特定点被称为屏障点。与闭锁(CountDownLatch)不同,闭锁通常是一次性的,而CyclicBarrier...
在Java并发编程中,"三剑客"指的是三个重要的并发工具类:CountDownLatch、CyclicBarrier和Semaphore。它们都是在`java.util.concurrent`包下,主要用于协调多线程间的同步和控制。 首先,CountDownLatch是一个...
Java并发编程是现代软件开发中的重要领域,尤其在多核处理器普及后,高效地利用并发已成为提高系统性能的关键。本文将全面介绍Java并发编程的基础知识、JVM同步原语、线程安全、低级并发工具、线程安全容器、高级...
CountDownLatch 并发编程 CountDownLatch 是一个同步的辅助类,它可以允许一个或多个线程等待,直到一组在其它线程中的操作执行完成。它通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了...
Java 并发工具类是 Java 并发编程的核心组件之一,提供了多种同步结构和并发容器,帮助开发者创建高效、可靠的并发程序。本文将详细介绍 Java 并发工具类的四大类:CountDownLatch、Semaphore、CyclicBarrier 和 ...
在Java并发编程中,`CountDownLatch`是一个同步辅助类,它允许多个线程等待其他线程完成操作。在批量插入数据的场景下,可以创建一个CountDownLatch对象,初始化为线程的数量,每个线程处理完自己的数据后调用`...
在 Java 编程中,模拟高并发是一种常见的需求,特别是在高并发场景下,需要模拟大量用户请求来验证系统的性能和稳定性。本文将介绍如何使用 Java 代码模拟高并发,通过示例代码详细讲解了使用 Semaphore 和 ...
`ReentrantLock`和`CountDownLatch`是基于AQS的典型应用,通过它们我们可以深入理解Java并发编程的复杂性以及如何通过AQS来控制线程的同步和通信。通过深入学习这些机制,开发者可以更好地处理并发问题,提高程序的...
Java.util.concurrent包是专门为Java并发编程设计的,包含了许多高级并发组件。这些组件可以被分类为以下几大类: - **locks部分**:包括显式锁,如互斥锁和重入锁,它们提供了比synchronized更灵活的锁定机制。 - ...