`

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...

    Introduction to Java Threads

    - **CyclicBarrier**和**CountDownLatch**:用于线程间的协作。 通过本教程的学习,读者将能够理解Java线程的基本原理,并能够运用这些知识来开发简单的多线程应用。此外,读者还将了解如何处理线程间的交互问题,...

    Multi person chat_jdk1.8_java编程_

    标题“Multi person chat_jdk1.8_java编程_”表明我们将探讨一个基于Java 1.8(也称为JDK 1.8)的多人聊天应用程序的实现。描述中提到使用IntelliJ IDEA(一个流行的Java开发集成环境)来构建这个应用,并且利用多...

    JAVAOpenMP并行计算框架

    2. **Java的并发模型**:Java提供了丰富的并发工具,如`Thread`类、`ExecutorService`、`Future`、`Callable`、`CyclicBarrier`、`Semaphore`等,以及并发集合如`ConcurrentHashMap`、`CopyOnWriteArrayList`等,...

    DefiantStream.java.multi.threaded.module.code.rar_Java编程_Java_

    Java的并发集合如ConcurrentHashMap、CopyOnWriteArrayList等,以及并发工具类如CountDownLatch、CyclicBarrier、Semaphore等,都是为了解决多线程环境中的数据同步问题。"DefiantStream.java"可能巧妙地运用了这些...

Global site tag (gtag.js) - Google Analytics