package com.test;
import java.util.Random;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CyclicBarrierTest
{
/**
* @param args
*/
public static void main(String[] args)
{
ExecutorService pool = Executors.newCachedThreadPool();
final CyclicBarrier cb = new CyclicBarrier(3); // 3个学生
for (int i = 0; i < 3; i++)
{
pool.execute(new Runnable()
{
public void run()
{
try
{
Thread.sleep(new Random().nextInt(10000));
System.out.println("学生:"
+ Thread.currentThread().getName()
+ "到达目的地1,当前已有" + (cb.getNumberWaiting()+1) + "人"
+ (cb.getNumberWaiting()==2?"都到达了,继续走":"等待其他人"));
cb.await();
Thread.sleep(new Random().nextInt(10000));
System.out.println("学生:"
+ Thread.currentThread().getName()
+ "到达目的地2,当前已有" + (cb.getNumberWaiting()+1) + "人"
+ (cb.getNumberWaiting()==2?"都到达了,继续走":"等待其他人"));
cb.await();
Thread.sleep(new Random().nextInt(10000));
System.out.println("学生:"
+ Thread.currentThread().getName()
+ "到达目的地3,当前已有" + (cb.getNumberWaiting()+1) + "人"
+ (cb.getNumberWaiting()==2?"都到达了,继续走":"等待其他人"));
cb.await();
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
pool.shutdown();
}
}
分享到:
相关推荐
在Java多线程编程中,`CyclicBarrier`是一个非常重要的同步工具类,它允许一组线程等待其他线程到达某个屏障点后再一起继续执行。这个屏障点就是我们所说的“循环栅栏”,顾名思义,它就像一个旋转门,所有线程必须...
- 使用CyclicBarrier实现多线程分治策略,每个子任务完成后来一次全局计算的例子。 - 线程间的异常处理,包括中断和超时的处理。 - 结合Future和ExecutorService,进一步提高并发性能和灵活性。 - 在大型项目中的...
CyclicBarrier的使用以及注意事项
Java并发系列之CyclicBarrier源码分析 CyclicBarrier是Java并发系列...* 等待所有人到齐后开始旅游 * 等待所有运动员到齐后开始比赛 CyclicBarrier是一个非常有用的同步工具类,能够帮助我们实现多个线程的相互等待。
下面是一个使用CyclicBarrier的典型例子,展示了一个并行分解问题的解决过程: ```java class Solver { final int N; final float[][] data; final CyclicBarrier barrier; class Worker implements Runnable...
用CyclicBarrier,reentrantlock,condition来完成同时购买,同步购买的功能 JUC系列之模拟抢票(N人同时抢票,票不足系统补仓,N-M人继续抢票) http://blog.csdn.net/crazyzxljing0621/article/details/77891620
CyclicBarrier是Java并发编程中一个非常重要的工具类,它属于java.util.concurrent包,主要用于多线程间的协作,尤其在需要多个线程等待彼此完成特定任务后才能继续执行的场景中发挥着关键作用。CyclicBarrier的名字...
在上面的例子中,CyclicBarrier被用来模拟四个游戏玩家玩游戏的场景,其中四个游戏玩家需要等待彼此达到某一目标后进行自己的下一步工作。 在这个场景中,CyclicBarrier的使用可以使得四个游戏玩家等待彼此达到某一...
在这个例子中,主任务会在所有子任务都完成之后打印出一条消息,表明所有子任务已经完成,并准备继续执行下一步操作。 ## 4. 循环使用CyclicBarrier ### 4.1 场景介绍 在某些应用场景中,任务可能会被重复执行多...
Java并发实例之CyclicBarrier的使用 CyclicBarrier是Java中的一种多线程并发控制实用工具,和CountDownLatch非常类似,它也可以实现线程间的计数等待,但是它的功能比CountDownLatch更加复杂且强大。CyclicBarrier...
在描述中提到的例子中,CyclicBarrier 被用来模拟黑车司机等待乘客上车的情景。当车辆满员(即达到预先设定的计数器阈值)时,才会触发预设的任务(如“人满了发车”)。这个例子展示了 CyclicBarrier 的基本用法: ...
在Java的并发编程中,CountDownLatch和CyclicBarrier是两个非常重要的同步工具,它们用于协调多个线程的执行顺序。本文将详细介绍CountDownLatch和CyclicBarrier的工作原理、使用场景以及如何在实际项目中应用它们。...
在上述的百米赛跑例子中,CountDownLatch被巧妙地应用了。`CountDownLatch(int count)`构造函数接收一个初始计数值,表示需要等待的线程数量。每个线程完成任务后,调用`countDown()`方法使计数值减一,直到计数值减...
Java并发编程(CyclicBarrier)实例详解 Java并发编程(CyclicBarrier)实例详解主要介绍了Java并发编程(CyclicBarrier)实例详解的相关资料,JAVA编写并发程序的时候,我们需要仔细去思考一下并发流程的控制,...
本示例将围绕“关于线程的例子”进行深入探讨,结合Eclipse3.3、MyEclipse6以及jdk1.5的软件环境,我们将学习如何在Java中创建、管理及同步线程。 首先,让我们了解线程的基本概念。线程是进程内的一个执行单元,每...
CyclicBarrier(处理方案示例).md
Java中的`CyclicBarrier`是一个同步辅助类,它允许一组线程互相等待,直到所有线程都到达一个公共的屏障点。这个屏障点就像一个交通信号灯,只有当所有的车辆(线程)都到达了交叉口,信号灯才会变为绿灯,允许它们...
Java多线程之CyclicBarrier的使用方法 Java多线程之CyclicBarrier的使用方法是Java多线程编程中的一种同步机制,用于实现多个线程之间的同步协作。CyclicBarrier是Java 5中引入的一种同步机制,用于让多个线程等待...
### CountDownLatch 和 CyclicBarrier 的运用(含AQS详解) #### CountDownLatch **定义与特点:** CountDownLatch 是 Java 并发包中的一个重要组件,它主要用于解决“一个或多个线程等待其他线程完成任务”的问题。...