`

jdk1.5——线程同步类CyclicBarrier

 
阅读更多

 

 

 

案例1:

package cn.crxy.synchronizer;

import java.util.Random;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.TimeUnit;
// 和CountDownLatch类似 但是使用场景不同, CountDownLatch用于 组和组线程之间等待   CyclicBarrierDemo用于同组内线程相互等待 
public class CyclicBarrierDemo {

	public static void main(String[] args) {
		final CyclicBarrier cb = new CyclicBarrier(4);
		
		for (int i = 0; i < 4; i++) {
			
			new Thread(new Runnable() {
				
				@Override
				public void run() {
					
					try {
						System.out.println(Thread.currentThread().getName()+" :爬山。。。");
						TimeUnit.SECONDS.sleep(new Random().nextInt(5)+1);
						System.out.println(Thread.currentThread().getName()+" :到达山顶了。。。");
						cb.await();//等待,直到计数器变为0为止
						
						System.out.println(Thread.currentThread().getName()+" :吃饭。。。");
						TimeUnit.SECONDS.sleep(new Random().nextInt(5)+1);
						System.out.println(Thread.currentThread().getName()+" :吃完饭了。。。");
						cb.await();//等待,直到计数器变为0为止
						
						System.out.println(Thread.currentThread().getName()+" :KTV。。。");
						TimeUnit.SECONDS.sleep(new Random().nextInt(5)+1);
						System.out.println(Thread.currentThread().getName()+" :唱完歌了。。。");
						cb.await();//等待,直到计数器变为0为止
						
						System.out.println(Thread.currentThread().getName()+":回家");
						
					} catch (InterruptedException e) {
						e.printStackTrace();
					} catch (BrokenBarrierException e) {
						e.printStackTrace();
					}
					
				}
			}).start();
		}
		
	}
}

 

 

 

案例2:

 

 

package cn.itcast.heima2;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 场景: 各自家出发到公司,会和后各自去公园,都达到公园会和后,在去A饭店吃饭
 * 
 * 
 * @author zm
 *
 */
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()*1000));	
						System.out.println("线程" + Thread.currentThread().getName() + 
								"即将到达集合地点2,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));
						cb.await();	
						Thread.sleep((long)(Math.random()*1000));	
						System.out.println("线程" + Thread.currentThread().getName() + 
								"即将到达集合地点3,当前已有" + (cb.getNumberWaiting() + 1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));						
						cb.await();						
					} catch (Exception e) {
						e.printStackTrace();
					}				
				}
			};
			service.execute(runnable);
		}
		service.shutdown();
	}
}

 

分享到:
评论

相关推荐

    jdk6.0从入门到精通-----chapter7线程

    java.util.concurrent包提供了Semaphore、CyclicBarrier、CountDownLatch等工具,为更复杂的线程同步场景提供解决方案。 线程状态是理解线程行为的关键。Java线程有五种基本状态:新建、就绪、运行、阻塞和终止。...

    jdk17.zip

    `java.util.concurrent`包中增加了一些新的工具类,如`CountDownLatch`、`CyclicBarrier`和`Phaser`,这些类有助于协调多线程间的同步。 8. **并发编程的`LinkedBlockingQueue`改进** 对`LinkedBlockingQueue`...

    良葛格Java JDK 5.0学习笔记.rar

    此外,JDK 5.0还改进了内存模型,支持了线程并发的更多原语,如`java.util.concurrent`包中的`Executor`和`Future`接口,以及`CyclicBarrier`、`Semaphore`等同步工具类。这些特性为编写高效的多线程程序提供了便利...

    java并发编程经典书籍(英文版)

    - **并发工具类**:在JDK 1.5之前,书中介绍了Semaphore、Barrier等并发工具,它们用于控制对共享资源的访问。 - **死锁、活锁和饥饿**:讨论了并发编程中可能出现的这些问题及其避免方法。 - **线程安全的数据...

    javaSE代码实例

    16.4.3 线程同步调度的方法 362 16.4.4 “生产者-消费者”案例的框架 362 16.4.5 “生产者-消费者”案例的实际运行 365 16.4.6 notify方法的使用 366 16.4.7 同步的语句块 367 16.4.8 线程的死锁 369 ...

    java并发源码集合-DeepLeaner_Java:Java集合框架源码,多线程,jdk5新特性泛型,并发知识总结学习

    理解线程的生命周期、同步机制(如synchronized关键字、Lock接口及其实现)、并发工具类(如Semaphore、CyclicBarrier、CountDownLatch)等,能帮助开发者编写出高效且线程安全的代码。特别关注线程间的通信(如wait...

    java的concurrent用法详解

    `CyclicBarrier`也是一个同步辅助类,它允许一组线程互相等待,直到达到某个公共的屏障点。与`CountDownLatch`不同的是,`CyclicBarrier`可以在所有线程都到达屏障点后重置屏障,以便再次使用。 **2.4.3 `Semaphore...

    Java并发编程实战(中文版).7z

    3. **并发工具类**:介绍了许多高级并发工具,如Executor框架、Semaphore信号量、CyclicBarrier屏障、CountDownLatch倒计时器、Phaser同步阶段以及Future和Callable接口,这些工具提供了更加灵活和强大的并发控制...

    常用的两个jar包

    3. **CyclicBarrier和Semaphore**:这两个同步工具类在1.5版本之后被广泛使用,但在早期的`concurrent-1.3.2.jar`中已经存在。`CyclicBarrier`用于让一组线程等待彼此到达一个共同的屏障点,而`Semaphore`则用于控制...

    google collection

    - **Phaser**:是一种可以替代CountDownLatch或CyclicBarrier的同步辅助类。 - **TransferQueue**:是一种特殊的队列实现,它可以将元素传递给等待的消费者线程。 - **应用场景**:在低线程池大小的情况下,优先...

    java课件 ppt格式

    10. **多线程**:线程的创建方式(Thread类和Runnable接口),线程同步机制(synchronized关键字、wait/notify等)。 11. **接口与抽象类**:接口的定义与实现,抽象类的概念和使用场景。 12. **Java Swing和JavaFX*...

    java语言程序设计(上册+下册)

    9. **多线程**:介绍了线程的基本概念,如何创建和管理线程,以及同步机制(如synchronized关键字和wait/notify机制)。 **下册——Java语言程序设计-进阶篇(原书第8版)** 进阶篇则更侧重于高级主题和技术,包括...

    Java基础资料

    最后,线程的使用也是这一章的重点,包括同步机制(synchronized关键字,wait()和notify()方法)和并发工具类(如Semaphore, CyclicBarrier)。 此外,资料中可能还会涉及Java的三大框架——Spring、MyBatis和...

    JAVA核心技术(卷1、卷2)(原书第9版译)

    3. **多线程**:学习线程的创建与管理,同步机制,死锁问题。 4. **网络编程**:通过Socket编程实现客户端和服务器通信。 5. **反射**:理解反射机制,如何在运行时动态访问类和对象。 6. **JNI(Java Native ...

    Java核心技术 原书第9版 2卷全

    1. **多线程**:探讨线程的创建、同步、通信,以及死锁和线程池。 2. **并发编程**:讲解并发工具类,如Semaphore、CountDownLatch、CyclicBarrier和ExecutorService。 3. **文件系统与NIO**:介绍Java NIO(New ...

    JAVA 208道面试题.pdf

    并发工具类如CountDownLatch、CyclicBarrier、Semaphore、Phaser等也被广泛使用。 ### 反射 Java反射机制允许程序在运行时访问和操作类、方法、接口等。通过反射,可以检查、修改和创建类的行为。常见的反射类包括...

    IBM笔试题—网络资源(整理的)

    - **并发工具类**:CountDownLatch、CyclicBarrier、Semaphore等的使用场景和案例分析。 - **原子操作**:AtomicInteger等类的使用方法。 ##### 3. 设计模式 - **单例模式**:懒汉式、饿汉式、静态内部类方式的实现...

    你好

    - **同步机制**:synchronized关键字实现线程同步,防止数据不一致。 - **并发工具类**:如Semaphore、CyclicBarrier、CountDownLatch等,提供更灵活的线程协作方式。 6. **I/O流** - **流的分类**:按照流向...

Global site tag (gtag.js) - Google Analytics