`

CyclicBarrier 例子

 
阅读更多
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();
	}
	}
	 

分享到:
评论

相关推荐

    CountDownLatch和CyclicBarrier用法实例大全

    - 使用CyclicBarrier实现多线程分治策略,每个子任务完成后来一次全局计算的例子。 - 线程间的异常处理,包括中断和超时的处理。 - 结合Future和ExecutorService,进一步提高并发性能和灵活性。 - 在大型项目中的...

    java.CyclicBarrier(解决方案).md

    CyclicBarrier是Java中一个非常实用的同步辅助...通过这个例子,可以看到CyclicBarrier在解决并行任务中同步问题的实用性。同时,这也展示了当使用CyclicBarrier遇到问题时,应该如何通过异常处理来避免程序出现故障。

    JAVA CyclicBarrier类详解.docx

    下面是一个使用CyclicBarrier的典型例子,展示了一个并行分解问题的解决过程: ```java class Solver { final int N; final float[][] data; final CyclicBarrier barrier; class Worker implements Runnable...

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴.pdf

    在上面的例子中,CyclicBarrier被用来模拟四个游戏玩家玩游戏的场景,其中四个游戏玩家需要等待彼此达到某一目标后进行自己的下一步工作。 在这个场景中,CyclicBarrier的使用可以使得四个游戏玩家等待彼此达到某一...

    Java中的CyclicBarrier类最全讲义

    在这个例子中,主任务会在所有子任务都完成之后打印出一条消息,表明所有子任务已经完成,并准备继续执行下一步操作。 ## 4. 循环使用CyclicBarrier ### 4.1 场景介绍 在某些应用场景中,任务可能会被重复执行多...

    28 人齐了,一起行动—CyclicBarrier详解.pdf

    在描述中提到的例子中,CyclicBarrier 被用来模拟黑车司机等待乘客上车的情景。当车辆满员(即达到预先设定的计数器阈值)时,才会触发预设的任务(如“人满了发车”)。这个例子展示了 CyclicBarrier 的基本用法: ...

    java并发编程中CountDownLatch和CyclicBarrier的使用.pdf

    在上述的百米赛跑例子中,CountDownLatch被巧妙地应用了。`CountDownLatch(int count)`构造函数接收一个初始计数值,表示需要等待的线程数量。每个线程完成任务后,调用`countDown()`方法使计数值减一,直到计数值减...

    Concurrent包的小例子

    Concurrent下的例子,涵盖了大部分常用类 例如BlockingQueue、CountDownLatch、CyclicBarrier、Exchanger、ExecuteService、lock、timeutil等

    java多线程并发编程例子

    1. **CyclicBarrier**:`CyclicBarrier`是一个同步辅助类,允许一组线程等待彼此到达一个公共屏障点。在所有线程都到达屏障后,屏障点被重置,然后线程可以继续执行。例如,`TestCyclicBarrier`和`TestCyclicBarrier...

    多线程小例子

    Java提供了多种机制来实现这一点,如`synchronized`关键字、`wait()`, `notify()`和`notifyAll()`方法,以及`java.util.concurrent`包中的工具类,如`Semaphore`, `CountDownLatch`, `CyclicBarrier`等。这些机制...

    Java线程的简单例子

    此外,还有Semaphore(信号量)用于限制同时访问特定资源的线程数量,CountDownLatch和CyclicBarrier用于多线程间的协作。 在实际开发中,我们还会遇到线程池的概念。Java的ExecutorService和ThreadPoolExecutor提供...

    java 编程百例 各种例子 全面

    17. **并发工具**:如Semaphore、CountDownLatch、CyclicBarrier等,用于多线程同步。 每个示例都会包含详细的代码解释和运行结果分析,帮助开发者逐步掌握Java编程的精髓。通过深入学习和实践这些例子,开发者能够...

    Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用

    在`CountDownLatchDemo1`的例子中,展示了5个线程代表5个工人,每个工人完成检查后,`countDown()`会使计数器减1。主线程调用`await()`方法,直到计数器归零,表示所有检查都完成,然后继续执行后续任务。 **...

    Java并发编程(22)并发新特性-障碍器CyclicBa

    使用CyclicBarrier的一个典型例子是分布式计算,比如将大任务分割成多个子任务,每个子任务由不同的线程处理,最后在CyclicBarrier处聚合结果。这样可以确保所有子任务都完成后再进行下一步操作。 下面是一个简单的...

    Java并发编程实战中的例子.zip

    `java.util.concurrent`包中的`Semaphore`、`CyclicBarrier`和`CountDownLatch`等类也是实现线程间同步的重要工具。 5. **并发模式**:包括生产者消费者模型、读者写者模型、工作窃取算法等,这些都是并发编程中...

    Java各种必备面试题目程序代码例子与应战技巧.zip

    5. **多线程**:线程的创建、同步(synchronized关键字、Lock接口)、并发工具类(ExecutorService, CountDownLatch, CyclicBarrier等)的应用。 6. **IO流**:掌握字节流和字符流的区别,了解NIO(New IO)和NIO.2...

    关于线程的例子

    通常,这样的章节会涵盖更复杂的话题,如线程池(`ExecutorService`),线程优先级,守护线程,以及并发工具类如`Semaphore`, `CyclicBarrier`, `CountDownLatch`等。通过分析和实践这些示例,你可以进一步提升对Java...

    线程同步器CycliBarrier你都不会吗?

    **例子解析:** 1. **一次线程同步**:在第一个示例中,我们创建了一个CyclicBarrier,初始化为2,这意味着我们需要两个线程同时到达屏障点。线程1和线程2分别启动并执行任务,调用`barrier.await()`后,它们会被...

Global site tag (gtag.js) - Google Analytics