`
endual
  • 浏览: 3578362 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

CyclicBarrier 同步工具(约定等待好线程的个数,然后做事情)

    博客分类:
  • java
 
阅读更多
package endual;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * CyclicBarrier
 * 表示的是大家彼此等待着,大家集合好以后才开始出发的,分散活动后有指定地点集合皮恩干嘛,这好比整个公司的人
 * 利用周末去玩,每个人好比一个线程,集合的时间和地点好比是路障,只有大家都到路障这个地方了,大家猜可以一起出发
 * 去游玩,只有有一个人不到这个路障,是不能进行出发的,再同时出发到公园优先,在指定的地点集合后在同时开始就餐
 */

public class CyclicBarrierApp {

	public static void main(String[] args) {
		
		final ExecutorService es = Executors.newCachedThreadPool() ; //有多少线程创建多少线程可以并发的进行执行
		//约定了三个线程到了才能开始干事情
		final CyclicBarrier cb = new CyclicBarrier(3) ; //设定了个数
		
		for (int i=0; i < 3; i++) {
			
			  Runnable runn = new Runnable() {

				public void run() {
					try {
						System.out.println();
						System.out.println("我要开始做事情了,要花费一些事情哦");
						System.out.println(Thread.currentThread().getName());

						try {
							System.out.println(Thread.currentThread().getName() + "事情还没做提示1");
							cb.await() ;
						} catch (BrokenBarrierException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} //这个是障碍,只有都到了三个线程,才能够开始执行下面的代码了
					System.out.println("事情要开始做了");
						System.out.println(Thread.currentThread().getName()+"88888888" ) ; //这个是大家都要做的事情
						
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
				}
				
			};
			
			es.execute(runn);
		}

	}
	
}

 

 

这个cyclicBarrier的意思是 创建创建一个对象,指定了要等待线程的个数,当等待线程的满足了个数,那么各自线程就自己执行下去代码,或者就挺留在那个位子中。

分享到:
评论

相关推荐

    CyclicBarrier的用法

    在Java多线程编程中,`CyclicBarrier`是一个非常重要的同步工具类,它允许一组线程等待其他线程到达某个屏障点后再一起继续执行。这个屏障点就是我们所说的“循环栅栏”,顾名思义,它就像一个旋转门,所有线程必须...

    CyclicBarrier实现多个线程相互等待的案例(实现累加操作)

    CyclicBarrier实现多个线程相互等待的案例(实现累加操作)

    Java多线程--等待所有子线程执行完的五种方法.docx

    主线程会先等待`thread1`完成,然后等待`thread2`完成。 ### 方法三:`CountDownLatch` `CountDownLatch`是Java并发包(`java.util.concurrent`)中的一个工具类,它允许一个或多个线程等待其他线程完成操作。创建一...

    Java中的CountDownLatch与CyclicBarrier:深入理解与应用实践

    在Java的并发编程中,CountDownLatch和CyclicBarrier是两个非常重要的同步工具,它们用于协调多个线程的执行顺序。本文将详细介绍CountDownLatch和CyclicBarrier的工作原理、使用场景以及如何在实际项目中应用它们。...

    Java简单实现“主线程等待所有子线程完成再继续”

    `CyclicBarrier`则允许一组线程等待其他线程到达一个公共屏障点,而`Semaphore`则可以用来控制同时访问特定资源的线程数量。 总的来说,Java提供了丰富的多线程同步机制,可以根据实际需求选择合适的方法来实现...

    java多线程之CyclicBarrier的使用方法

    CyclicBarrier是Java 5中引入的一种同步机制,用于让多个线程等待到达一个共同的屏障点,直到所有线程都到达该点后,所有线程才能继续执行。 Java多线程之CyclicBarrier的使用方法主要有以下几个方面: 1. 创建...

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

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具,用于协调多个线程之间的交互。它们都属于java.util.concurrent包下的类,为多线程编程提供了强大的支持。 **CountDownLatch** 是一个...

    CountDownLatch和CyclicBarrier用法实例大全

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具类,它们用于协调多个线程间的协作。这两个工具都是在`java.util.concurrent`包下,是Java并发库的重要组成部分。 **CountDownLatch** ...

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

    线程同步器CycliBarrier是Java并发编程中一个重要的工具,它允许一组线程等待彼此到达一个共同的屏障点,然后一起继续执行。相比于CountDownLatch,CyclicBarrier具有可重用性,也就是说,一旦所有线程都到达屏障点...

    多线程的批量线程同步解决方案

    "多线程的批量线程同步解决方案"这个标题暗示我们探讨的是如何在多线程环境下有效地管理和同步多个任务,确保数据一致性与程序正确性。下面将详细阐述相关知识点。 一、多线程基础 多线程是指在一个进程中同时执行...

    让线程按顺序执行8种方法.doc

    CyclicBarrier是一个同步工具,可以用于实现线程之间的同步。使用CyclicBarrier可以让线程按顺序执行,并且可以实现线程之间的同步。 八、使用线程的Semaphore(信号量)方法 Semaphore是一个同步工具,可以用于...

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

    CyclicBarrier 是 Java 并发库中的一种同步工具类,用于协调多个线程之间的协作,使得它们能够一起开始某个计算任务或操作。它的名称“CyclicBarrier”来源于它具有可重用的特点,即当所有等待的线程都达到指定的...

    java 同步阻塞并唤醒指定线程

    这时,我们可以利用`java.util.concurrent`包中的`Semaphore`(信号量)、`CyclicBarrier`(循环屏障)或`CountDownLatch`(计数门锁)等工具来更精细地控制线程的同步和唤醒。例如,`Semaphore`可以限制同时访问...

    一个简单的线程同步实例

    CountDownLatch是另一个有用的同步工具,它允许一个或多个线程等待其他线程完成操作。在CountDownLatch初始化时设置一个计数值,每次调用countDown()方法时,计数值减一,直到计数值为零时,所有等待的线程才会被...

    java线程并发cyclicbarrier类使用示例

    Java中的`CyclicBarrier`是用于多线程同步的一个强大工具,主要应用于一组线程需要在继续执行之前等待其他线程到达某个特定点的情况。它允许开发者定义一个屏障点,只有当所有参与的线程都到达这个屏障点时,它们才...

    java多线程之A线程等B、C线程都执行完在执行的结果示例

    理解并熟练掌握这些多线程同步工具,对于编写高效、安全的并发代码至关重要。在实际开发中,我们需要根据具体场景选择合适的方法,确保程序的正确性和性能。同时,还要注意避免死锁、饥饿和活锁等并发问题,保持代码...

    27_多线程_第2天(线程安全、线程同步、等待唤醒机制、单例设计模式)_讲义

    然而,多线程环境下也会带来一系列问题,如数据不一致性、资源竞争等,因此,理解线程安全、线程同步以及等待唤醒机制至关重要。此外,单例设计模式在确保一个类只有一个实例的同时,提供了全局访问点,也是多线程...

    java 多线程同步

    线程的创建可以通过Thread类或Runnable接口实现,同步可以通过`synchronized`关键字、Lock接口(如ReentrantLock)以及高级工具如Semaphore和CyclicBarrier来完成。线程中断和异常处理是保证线程安全和程序健壮性的...

    CyclicBarrier用法.docx

    CyclicBarrier是Java并发编程中一个非常重要的工具类,它属于java.util.concurrent包,主要用于多线程间的协作,尤其在需要多个线程等待彼此完成特定任务后才能继续执行的场景中发挥着关键作用。CyclicBarrier的名字...

    Java多线程同步论文.doc

    - **java.util.concurrent** 包提供了更高级的同步工具,如 `ReentrantLock`、`Semaphore` 和 `CyclicBarrier` 等,它们提供了更灵活的控制和更好的性能。 - **volatile** 关键字:用于标记变量,使得多线程环境中...

Global site tag (gtag.js) - Google Analytics