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

Java CyclicBarrier学习

阅读更多

CyclicBarrier用于处理任务拆分,计算,等待计算全部完成,然后合并计算的场景,Future,CountDownLatch可以实现类似的场景。

 

package multithread.cycle;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

/**
 * 计算1^2 + 2^2 + 3^2 + ...
 * 
 * @author lemzhang
 * 
 */
public class TestCycle {
	private final CyclicBarrier cb;
	private final BlockingQueue<Long> result;
	private int total = 0;

	public TestCycle(int n) {
		result = new ArrayBlockingQueue<Long>(n);
		final long start = System.currentTimeMillis();
		cb = new CyclicBarrier(n, new Runnable() {
			@Override
			public void run() {
				for (Long i : result) 
					total += i;
				long end = System.currentTimeMillis();
				System.out.printf("我计算好了,花了%d毫秒,结果是%d", (end - start), getResult());
			}
		});
	}

	public void calculate() {
		for (int i = 1; i <= cb.getParties(); i++) {
			new Thread(new Calculate(i)).start();
		}
	}

	public long getResult() {
		return total;
	}

	class Calculate implements Runnable {
		private int n;
		Calculate(int n) {
			this.n = n;
		}
		@Override
		public void run() {
			result.offer((long) Math.pow(n, 2));
			try {
				cb.await();
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (BrokenBarrierException e) {
				e.printStackTrace();
			} 
		}
	}

	public static void main(String[] args) {
		 TestCycle t = new TestCycle(200);
		 t.calculate();
	}
}

 

分享到:
评论

相关推荐

    JAVA扩展学习资料2

    Java提供了多种工具和接口,如线程(Thread)、ExecutorService、Future、Semaphore、CyclicBarrier、CountDownLatch等,用于管理和控制多线程环境下的并发执行,提高程序的并行效率。 3. **文件操作**:"[Java]...

    Java进阶学习资料.zip

    在Java进阶学习中,你需要掌握以下几个关键的知识点: 1. 高级数据结构与算法:理解并能熟练运用ArrayList、LinkedList、HashMap等集合框架,深入研究Set、Queue、Stack等接口及其实现类。同时,学习并应用高级排序...

    Java经典学习资料

    6. **多线程**:Java提供对多线程的全面支持,包括Thread类、Runnable接口,以及并发工具类如synchronized、wait/notify、Semaphore、CyclicBarrier等。理解线程同步和协作对于编写高效并发程序至关重要。 7. **JVM...

    java 并发学习总结

    3. **同步工具类**:Java并发包`java.util.concurrent`中的工具类,如`Semaphore`(信号量)、`CyclicBarrier`(回环栅栏)、`CountDownLatch`(倒计时器)和`FutureTask`(未来任务)等,提供了更灵活的线程同步和...

    Java基础尚硅谷宋红康学习笔记

    10. **Java并发编程**:包括线程池、锁机制(如synchronized、ReentrantLock)、并发容器(如ConcurrentHashMap、CopyOnWriteArrayList)以及并发工具类(如CountDownLatch、CyclicBarrier)。 这些是Java基础知识...

    java学习文档PDF版

    Java提供了丰富的并发工具,如Thread、ExecutorService、Semaphore、CyclicBarrier等,以及java.util.concurrent包下的各种高级组件。文档可能涵盖线程安全、同步机制(synchronized、Lock)、并发容器、Future和...

    CountDownLatch和CyclicBarrier用法实例大全

    学习和理解这两个工具,对于提升Java并发编程的能力至关重要,它们能帮助我们编写出更加高效、可维护的并发代码。通过阅读《java并发编程》中的实例,你可以更深入地掌握这些概念,并在实际工作中灵活运用。

    Java Java程序设计 Java学习文档 Java语言

    线程同步和通信机制(如synchronized关键字、wait()、notify()、锁对象、CountDownLatch、CyclicBarrier等)是这部分学习的重点。 网络编程也是Java的重要组成部分,Socket编程允许创建客户端和服务器应用,实现...

    JAVA线程学习(源代码)

    本资源"JAVA线程学习(源代码)"提供了关于Java线程的源代码示例,帮助我们深入理解和实践线程的使用。 首先,我们要理解Java中的线程模型。Java线程由`java.lang.Thread`类或`java.util.concurrent.Executor`框架来...

    java学习笔记,好好学习

    这篇“java学习笔记”可能包含了从基础到进阶的各种Java编程概念和技术。以下是对这些笔记可能涵盖的一些关键知识点的详细说明: 1. **Java基础知识**: - **语法**:包括变量声明、数据类型(如整型、浮点型、...

    java课程学习ppt

    学习Java的多线程编程,包括Thread类、Runnable接口,同步机制(synchronized关键字、wait()、notify()、notifyAll())以及并发工具类如Semaphore、CyclicBarrier等。理解线程间的协作和竞态条件。 第九章:Java...

    java2学习1

    在这个"java2学习1"的主题下,我们将深入探讨Java 2的核心概念和技术,以便帮助你更好地理解和掌握这个强大的编程平台。 1. **基础语法与数据类型**: Java 2的基础始于它的语法结构,包括变量声明、条件语句(如...

    JAVA多线程学习内容

    总的来说,Java多线程学习涵盖了线程的创建、同步、通信、调度以及异常处理等多个方面,深入理解和掌握这些知识点对于提升Java程序的性能和复杂性至关重要。通过阅读提供的"Java多线程.pdf"文档,你可以进一步了解和...

    《java开发篇》学习总结,JAVA应用编程150例,java+编程

    6. **多线程**:Java支持多线程编程,可以创建和管理多个执行线程,理解同步机制(如synchronized关键字、wait()、notify())和并发工具类(如ExecutorService、Semaphore、CyclicBarrier)。 7. **网络编程**:...

    core java 学习java的书籍

    《Core Java 学习》是一本专为Java初学者和进阶者编写的经典教材,旨在帮助读者深入理解和掌握Java编程的核心概念和技术。书中的内容覆盖了Java语言的基础语法、面向对象编程、异常处理、多线程、集合框架、输入输出...

    Java SCJP中文学习指南

    这个“Java SCJP中文学习指南”旨在帮助中文使用者深入理解Java编程语言,掌握核心概念和技术,为参加SCJP考试做好准备。 一、Java基础 Java是一种面向对象的编程语言,由Sun Microsystems(后被Oracle收购)开发。...

    Java学习资料499篇文章

    Java提供了Thread类和Runnable接口来创建线程,还有synchronized关键字、wait/notify机制以及并发工具类如Semaphore、CyclicBarrier等,帮助开发者管理多线程环境中的资源和同步问题。 Java反射机制允许我们在运行...

    java学习资料

    Java并发包(java.util.concurrent)提供了丰富的工具,如Semaphore(信号量)、CountDownLatch(计数器)和CyclicBarrier(循环栅栏)等,用于协调多线程间的同步和通信。 最后,Spring框架是Java开发中广泛使用的...

    Java并发编程学习笔记.rar

    Java提供了多种同步机制,如`synchronized`关键字、`Lock`接口(包括`ReentrantLock`)以及`java.util.concurrent`包中的各种工具类,如`Semaphore`、`CountDownLatch`和`CyclicBarrier`。 3. ** volatile关键字**...

    《Java JDK 6 学习笔记》配书示例

    12. **并发工具类(java.util.concurrent)**:包含如Semaphore、CountDownLatch、CyclicBarrier等高级并发控制工具,便于开发多线程应用。 通过《Java JDK 6 学习笔记》中的示例,读者可以深入了解这些特性,并...

Global site tag (gtag.js) - Google Analytics