`

multi-thread(十)CyclicBarrier

 
阅读更多

Semaphore.acquire():最多n个运行,与Executors.newFixedThreadPool( 2 )作用相似

CyclicBarrier.await(): 加到n才开始

CountDownLatch.await(): 减到0才开始

 

/**
 * CyclicBarrier.await(): Waits until all parties have invoked await on this barrier. 
 * @author timeriver.wang
 * @date Mar 10, 2014 10:43:52 AM
 */
public class CyclicBarrierTest {

	public static void main(String[] args) {
		ExecutorService service = Executors.newCachedThreadPool();
		final  CyclicBarrier cb = new CyclicBarrier(3);
		for(int i=0;i<3;i++){
			Runnable runnable = new Runnable(){
					public void run(){
					try {
						Thread.sleep((long)(Math.random()*1000));	
						System.out.println("线程" + Thread.currentThread().getName() + 
								"即将到达集合地点1,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));						
						cb.await();
						
						Thread.sleep((long)(Math.random()*10000));	
						System.out.println("线程" + Thread.currentThread().getName() + 
								"即将到达集合地点2,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));
						cb.await();	
					} catch (Exception e) {
						e.printStackTrace();
					}				
				}
			};
			service.execute(runnable);
		}
		service.shutdown();
	}
}

 

分享到:
评论

相关推荐

    Java实现多线程下载源代码

    Java提供了多种创建线程的方式,如继承Thread类或实现Runnable接口,然后通过调用start()方法启动线程。 在描述中提到的NetBeans是一个流行的Java集成开发环境(IDE),它为开发者提供了丰富的工具和功能,包括代码...

    thread源码java-java-multi-thread-programming:java多线程编程核心技术

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提升软件的效率和响应...在实际项目中,结合Java的开源库,如`java-multi-thread-programming-master`,可以进一步提升我们的多线程编程能力。

    java-multi-thread:《 Java多线程编程核心技术》源代码-java source code

    - `CyclicBarrier` 和 `CountDownLatch`:协调多个线程间的同步。 3. **线程通信**: - `wait()`, `notify()`, `notifyAll()`:在 `synchronized` 块内使用,实现线程间的通信和协作。 - `BlockingQueue`:如 `...

    nimbo-java-multi-threading:Java多线程演示代码

    `nimbo-java-multi-threading`项目提供了丰富的示例代码,帮助开发者深入理解和实践Java的多线程技术。以下将详细讲解Java多线程的相关知识点。 1. **线程的创建** - **继承Thread类**:通过继承`java.lang.Thread...

    java-thread-vedio.rar_java vedio

    这个"java-thread-vedio.rar_java vedio"压缩包文件显然包含了关于Java多线程的视频教程,适合初学者或者需要深化理解多线程的开发者学习。下面我们将详细探讨Java线程的相关知识点。 1. **线程的创建方式**: - *...

    java并发编程专题(九)----(JUC)浅析CyclicBarrier

    Java 并发编程专题(九)----(JUC)浅析 CyclicBarrier CyclicBarrier 是 Java 并发编程中的一个同步辅助工具,它允许一组线程全部等待彼此到达公共屏障点。它的字面意思是可循环使用的屏障,用于让一组线程到达一...

    CyclicBarrier的用法

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

    CountDownLatch和CyclicBarrier用法实例大全

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

    GUI-and-Thread-JAVA.zip_GUI,Java,

    线程同步是多线程编程中的重要概念,包括了synchronized关键字、wait()、notify()和notifyAll()方法,以及volatile关键字和java.util.concurrent包中的工具,如Semaphore、CyclicBarrier和CountDownLatch等。...

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

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

    java-Thread-study-summary.zip_java 多线程

    `java.util.concurrent`包提供了多种并发工具类,如`CountDownLatch`、`CyclicBarrier`、`Semaphore`等,帮助开发者解决多线程环境下的同步问题。 8. **死锁** 当两个或更多线程相互等待对方释放资源时,形成死锁...

    CyclicBarrier的使用以及注意事项

    CyclicBarrier的使用以及注意事项

    Java多线程应用

    3. **Java并发工具** (thread-t050-jdk1.5-scheduledthreadpool, thread-t053-jdk1.5-cyclicbarrier, thread-t048-jdk1.5-singletaskthreadpool): - **ScheduledThreadPoolExecutor** 提供定时及周期性任务执行的...

    Java中的CyclicBarrier类最全讲义

    # Java中的CyclicBarrier类最全讲义 ## 1. 简介 ### 1.1 并发编程与线程协作 在现代软件开发中,特别是高性能计算领域,利用多核处理器的能力变得至关重要。为了充分利用这些硬件资源,程序员们开始广泛采用并发...

    JAVA线程高级-线程按序交替执行

    Java提供了一些高级特性来实现这样的需求,比如`Thread`类、`synchronized`关键字以及Java并发工具包(JUC, Java Util Concurrency)中的类。 1. **线程的生命周期与状态**: - 线程有新建、就绪、运行、阻塞和死亡...

    Java并发实例之CyclicBarrier的使用

    Java并发实例之CyclicBarrier的使用 CyclicBarrier是Java中的一种多线程并发控制实用工具,和CountDownLatch非常类似,它也可以实现线程间的计数等待,但是它的功能比CountDownLatch更加复杂且强大。CyclicBarrier...

    CyclicBarrier用法.docx

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

    【2018最新最详细】并发多线程教程

    【2018最新最详细】并发多线程教程,课程结构如下 ...25.大白话说java并发工具类-CountDownLatch,CyclicBarrier 26.大白话说java并发工具类-Semaphore,Exchanger 27.一篇文章,让你彻底弄懂生产者--消费者问题

    CyclicBarrier,reentrantlock,condition模拟抢票

    用CyclicBarrier,reentrantlock,condition来完成同时购买,同步购买的功能 JUC系列之模拟抢票(N人同时抢票,票不足系统补仓,N-M人继续抢票) http://blog.csdn.net/crazyzxljing0621/article/details/77891620

Global site tag (gtag.js) - Google Analytics