import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
*
* @author Administrator
*这里的parties也是一个计数器,
*例如,初始化时parties里的计数是3,
*于是拥有该CyclicBarrier对象的线程当parties的计数为3时就唤醒
*,注:这里parties里的计数在运行时当调用CyclicBarrier:await()时,计数就加1,一直加到初始的值
*/
public class TestCyclicBar{
/** 用于提交任务的线程池*/
private final ExecutorService pool;
public TestCyclicBar(){
pool=Executors.newCachedThreadPool();
}
/**
* 玩家类
* @author Administrator
*
*/
class Player implements Runnable{
private String playNm;
private final CyclicBarrier cyclicBarrier;
public Player(CyclicBarrier cyclicBarrier,String playNm){
this.cyclicBarrier=cyclicBarrier;
this.playNm=playNm;
}
public void run(){
try {
System.out.println(playNm+" 正在玩第一关");
cyclicBarrier.await();
System.out.println(playNm+" 进入第二关");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void service(){
CyclicBarrier cyclicBarrier = new CyclicBarrier(4, new Runnable() {
public void run() {
System.out.println("所有玩家进入第二关!");
}
});
for (int i = 0; i < 4; i++) {
Player p= new Player(cyclicBarrier,"玩家"+i);
pool.submit(p);
}
}
public static void main(String[] args) {
TestCyclicBar t=new TestCyclicBar();
t.service();
}
}
分享到:
相关推荐
- 使用CyclicBarrier实现多线程分治策略,每个子任务完成后来一次全局计算的例子。 - 线程间的异常处理,包括中断和超时的处理。 - 结合Future和ExecutorService,进一步提高并发性能和灵活性。 - 在大型项目中的...
CyclicBarrier是Java中一个非常实用的同步辅助...通过这个例子,可以看到CyclicBarrier在解决并行任务中同步问题的实用性。同时,这也展示了当使用CyclicBarrier遇到问题时,应该如何通过异常处理来避免程序出现故障。
下面是一个使用CyclicBarrier的典型例子,展示了一个并行分解问题的解决过程: ```java class Solver { final int N; final float[][] data; final CyclicBarrier barrier; class Worker implements Runnable...
在上面的例子中,CyclicBarrier被用来模拟四个游戏玩家玩游戏的场景,其中四个游戏玩家需要等待彼此达到某一目标后进行自己的下一步工作。 在这个场景中,CyclicBarrier的使用可以使得四个游戏玩家等待彼此达到某一...
在这个例子中,主任务会在所有子任务都完成之后打印出一条消息,表明所有子任务已经完成,并准备继续执行下一步操作。 ## 4. 循环使用CyclicBarrier ### 4.1 场景介绍 在某些应用场景中,任务可能会被重复执行多...
在描述中提到的例子中,CyclicBarrier 被用来模拟黑车司机等待乘客上车的情景。当车辆满员(即达到预先设定的计数器阈值)时,才会触发预设的任务(如“人满了发车”)。这个例子展示了 CyclicBarrier 的基本用法: ...
在上述的百米赛跑例子中,CountDownLatch被巧妙地应用了。`CountDownLatch(int count)`构造函数接收一个初始计数值,表示需要等待的线程数量。每个线程完成任务后,调用`countDown()`方法使计数值减一,直到计数值减...
Concurrent下的例子,涵盖了大部分常用类 例如BlockingQueue、CountDownLatch、CyclicBarrier、Exchanger、ExecuteService、lock、timeutil等
1. **CyclicBarrier**:`CyclicBarrier`是一个同步辅助类,允许一组线程等待彼此到达一个公共屏障点。在所有线程都到达屏障后,屏障点被重置,然后线程可以继续执行。例如,`TestCyclicBarrier`和`TestCyclicBarrier...
Java提供了多种机制来实现这一点,如`synchronized`关键字、`wait()`, `notify()`和`notifyAll()`方法,以及`java.util.concurrent`包中的工具类,如`Semaphore`, `CountDownLatch`, `CyclicBarrier`等。这些机制...
此外,还有Semaphore(信号量)用于限制同时访问特定资源的线程数量,CountDownLatch和CyclicBarrier用于多线程间的协作。 在实际开发中,我们还会遇到线程池的概念。Java的ExecutorService和ThreadPoolExecutor提供...
17. **并发工具**:如Semaphore、CountDownLatch、CyclicBarrier等,用于多线程同步。 每个示例都会包含详细的代码解释和运行结果分析,帮助开发者逐步掌握Java编程的精髓。通过深入学习和实践这些例子,开发者能够...
在`CountDownLatchDemo1`的例子中,展示了5个线程代表5个工人,每个工人完成检查后,`countDown()`会使计数器减1。主线程调用`await()`方法,直到计数器归零,表示所有检查都完成,然后继续执行后续任务。 **...
使用CyclicBarrier的一个典型例子是分布式计算,比如将大任务分割成多个子任务,每个子任务由不同的线程处理,最后在CyclicBarrier处聚合结果。这样可以确保所有子任务都完成后再进行下一步操作。 下面是一个简单的...
`java.util.concurrent`包中的`Semaphore`、`CyclicBarrier`和`CountDownLatch`等类也是实现线程间同步的重要工具。 5. **并发模式**:包括生产者消费者模型、读者写者模型、工作窃取算法等,这些都是并发编程中...
5. **多线程**:线程的创建、同步(synchronized关键字、Lock接口)、并发工具类(ExecutorService, CountDownLatch, CyclicBarrier等)的应用。 6. **IO流**:掌握字节流和字符流的区别,了解NIO(New IO)和NIO.2...
通常,这样的章节会涵盖更复杂的话题,如线程池(`ExecutorService`),线程优先级,守护线程,以及并发工具类如`Semaphore`, `CyclicBarrier`, `CountDownLatch`等。通过分析和实践这些示例,你可以进一步提升对Java...
**例子解析:** 1. **一次线程同步**:在第一个示例中,我们创建了一个CyclicBarrier,初始化为2,这意味着我们需要两个线程同时到达屏障点。线程1和线程2分别启动并执行任务,调用`barrier.await()`后,它们会被...