`
fanshaohua110
  • 浏览: 7474 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA中CyclicBarrier(关卡)

阅读更多
CyclicBarrier 类似于我们前面看到的CountDownLatch.但是有以下两点不同:
1:CountDownLatch 是当状态达到后即当计数器为零,所有线程通过后CountDownLatch不可再用。而CyclicBarrier 可以当状态达到后,所有线程通过后即可重复使用。
2:CountDownLatch 等待的是事件。CyclicBarrier 等待的是线程.
这里解释下等待事件和线程的区别.
  由于CountDownLatch 存在countDown()方法。即对计数器减去1
  假设我们有如下代码:CountDownLatch latch = new CountDownLatch(5);
  我们在一个线程中对countDown()调用了5次。那么这个CountDownLatch的计数器就减为零。
然后等待的线程就可以通过了。

  CyclicBarrier 一直等待指定数量的线程是否全部已经到达await()点了。如果全部达到,则“开闸”释放所有线程继续执行。
我们来看下CyclicBarrier 的方法:

await()阻塞知道指定线程到达
getParties()获取初始指定线程数量
await(long timeout, TimeUnit unit)阻塞指定的时间内等待所有线程到达。如果没有则返回。
isBroken查询是否处于损坏状态
reset重置为初始状态
getNumberWaiting()获取等待线程数量


再看下它的构造器:
CyclicBarrier(int parties)指定初始化关卡数量
CyclicBarrier(int parties, Runnable barrierAction)此处指定了一个Runnable对象。由最后一个进入barrier的线程来执行这个操作.


举例说明下CyclicBarrier的几种用法:

1.重复使用

package com.asiainfo.concurrent;
/**
 * @author fansh
 */
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

public class CyclicBarrierTest {

	public static void main(String[] args) {
		
		CyclicBarrier barrier = new CyclicBarrier(5);
		System.out.println(barrier.getParties());
		for(int i=0;i<5;i++){
			BarrierThread thread = new BarrierThread(barrier);
			thread.start();
		}
	}

}

class BarrierThread extends Thread{
	
	private CyclicBarrier barrier;
	
	public BarrierThread(CyclicBarrier barrier){
		this.barrier=barrier;
	}
	
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName()+"first point running! ...........");
		try {
			barrier.await();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (BrokenBarrierException e) {
			e.printStackTrace();
		}
		System.out.println(Thread.currentThread().getName()+"first point finished!.............");
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}
		System.out.println(Thread.currentThread().getName()+"second point running! ...........");
		try {
			barrier.await();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (BrokenBarrierException e) {
			e.printStackTrace();
		}
		System.out.println(Thread.currentThread().getName()+"second point finished!.............");
	}
}





分享到:
评论

相关推荐

    Java并发编程(CyclicBarrier)实例详解

    在实际应用中,我们可以使用CyclicBarrier来控制多个线程之间的协作,例如,在游戏中,我们可以使用CyclicBarrier来控制四个玩家之间的协作,每个玩家需要到达某个关卡时,其他玩家也需要到达该关卡时,所有玩家才能...

    JAVA葵花宝典 Java面试宝典

    6. **多线程**:Java提供了丰富的多线程支持,包括Thread类、Runnable接口、并发工具类如Semaphore、CyclicBarrier等,理解并发与同步的概念及其在实际开发中的应用。 7. **IO流**:Java IO系统包括字节流、字符流...

    Java面试资料大全

    Java面试是每位Java开发者职业生涯中的重要关卡,它不仅检验了开发者的基础理论知识,还考察了实际编程能力、解决问题的能力以及对技术趋势的理解。这份"Java面试资料大全"包含了丰富的资源,旨在帮助Java程序员准备...

    java程序员面试笔试宝典

    这本书深入浅出地涵盖了Java编程领域的诸多关键知识点,旨在帮助求职者在面试过程中表现出色,顺利通过技术关卡。以下将详细介绍书中可能涉及的一些重要知识点: 1. **Java基础**:包括Java语法、数据类型、控制...

    dictionary-of-java-job-keepers.rar_Keepers

    在Java编程的世界里,面试是每一位开发者通往职业发展的重要关卡。这份名为"dictionary-of-java-job-keepers.rar_Keepers"的压缩包,就如同一个守护者,它包含了Java程序员面试时经常会被问到的问题及其详尽的解答,...

    java面试试题

    Java面试是每位Java开发者职业生涯中的重要关卡,无论是应届毕业生还是有经验的程序员,都需要对Java语言的核心概念、框架、设计模式以及最佳实践有深入理解。以下是一些可能出现在Java面试中的关键知识点: 1. **...

    java面试题总结资料.zip

    Java面试是每位Java开发者职业生涯中的重要关卡,它考察了候选人的基础知识、编程能力、问题解决技巧以及对特定框架和数据库的理解。这份“java面试题总结资料”包含了多个关键领域的精华,旨在帮助面试者在面试中...

    Java 面试题经典 77 问!.zip

    Java面试是每位Java开发者职业生涯中的重要关卡,它考察了开发者对语言特性的理解、实践经验以及问题解决能力。这份"Java面试题经典77问!.zip"压缩包包含了一份PDF文档,它提供了全面的Java面试准备指南。下面,...

    java面试大全

    4. **并发工具类**:如CountDownLatch、CyclicBarrier等,讨论它们在实际项目中的应用案例。 5. **原子操作**:了解AtomicInteger等原子类的内部实现机制,以及与synchronized关键字的区别。 ### 高级主题 1. **...

    一线名企面试题.rar

    《一线名企面试题》是针对Java程序员面试精心编纂的资料合集,尤其适合不同经验层次的初、中、...通过这份《一线名企面试题》压缩包,你可以系统性地复习和提升自己的Java技术水平,为成功闯过面试关卡做好充分准备。

    java面试总结

    Java面试是每位Java开发者职业生涯中的重要关卡,无论是初出茅庐的新手还是经验丰富的老手,都需要对这个领域有深入的理解。以下是一份详尽的Java面试知识点总结,涵盖了多方面的重要难点。 1. **Java基础知识** -...

    Java中同步与并发用法分析

    - **CyclicBarrier** 是一种多线程同步辅助工具,允许多个线程到达一个关卡后继续执行,可以重复使用,即“循环”屏障。 了解并熟练掌握以上知识点对于编写高效、线程安全的Java应用程序至关重要。在实际开发中,...

    浅谈Java线程并发知识点

    同步器,如`Semaphore`(信号量)、`CyclicBarrier`(屏障/关卡)和`CountDownLatch`(计数门),是Java并发编程中的重要工具。`Semaphore`可以限制同时访问特定资源的线程数量,`CyclicBarrier`则要求所有线程都到达一个...

    腾讯面试大礼包,面经、面试题等

    4. **并发编程**:线程同步机制(synchronized、Lock),并发容器(ConcurrentHashMap、CountDownLatch、CyclicBarrier等),以及并发设计原则。 5. **算法与数据结构**:排序(快速排序、归并排序、堆排序等)、...

    InterviewNote:准备面试

    在IT行业中,面试是每个求职者必经的关卡,特别是对于Java开发者来说,扎实的理论基础、实践经验以及良好的问题解决能力是成功的关键。本文将根据"InterviewNote:准备面试"这一主题,深入探讨Java相关的面试知识点,...

Global site tag (gtag.js) - Google Analytics