Java之同步计数器CyclicBarrier

简介: 看下图,体会一下处理流程上的不同。

看下图,体会一下处理流程上的不同。

58cd83d79cff8a290964e1459bf5c729e4be900f


package demo.thread;

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


public class ThreadMain {
	public static void main(String[] args) throws Exception {
		CyclicBarrier barrier = new CyclicBarrier(3, new TotalTask());
		BillTask worker1 = new BillTask("111", barrier);
		BillTask worker2 = new BillTask("222", barrier);
		BillTask worker3 = new BillTask("333", barrier);
		worker1.start();
		worker2.start();
		worker3.start();
		
		System.out.println("Main thread end!");
		
	}
	
	static class TotalTask extends Thread {
		public void run() {
			System.out.println("所有子任务都执行完了,就开始执行主任务了.");
		}
	}
	
	static class BillTask extends Thread {
		private String billName;
		private CyclicBarrier barrier;
		public BillTask(String workerName, CyclicBarrier barrier) {
			this.billName = workerName;
			this.barrier = barrier;
		}
		public void run() {
			try {
				System.out.println("市区: " + billName + "运算开始: ");
				Thread.sleep(1000L);
				System.out.println("市区: " + billName + "运算完成,等待中。。。");
				try {
					barrier.await();
				} catch (BrokenBarrierException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println("全部都结束, 市区 " + billName + "才开始后面的工作。");
			} catch(InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}


市区: 111运算开始: 
市区: 333运算开始: 
Main thread end!
市区: 222运算开始: 
市区: 222运算完成,等待中。。。
市区: 111运算完成,等待中。。。
市区: 333运算完成,等待中。。。
所有子任务都执行完了,就开始执行主任务了.
全部都结束, 市区 222才开始后面的工作。
全部都结束, 市区 111才开始后面的工作。
全部都结束, 市区 333才开始后面的工作。


目录
相关文章
|
2月前
|
Java 云计算
Java多线程编程中的同步与互斥机制探析
在当今软件开发领域,多线程编程是一项至关重要的技能。本文将深入探讨Java中的同步与互斥机制,分析其在多线程环境下的应用及实现原理,帮助读者更好地理解并运用这一关键技术。
27 4
|
4月前
|
存储 设计模式 安全
Java 编程问题:十、并发-线程池、可调用对象和同步器2
Java 编程问题:十、并发-线程池、可调用对象和同步器
33 0
|
4月前
|
缓存 安全 Java
Java 编程问题:十、并发-线程池、可调用对象和同步器1
Java 编程问题:十、并发-线程池、可调用对象和同步器
44 0
|
28天前
|
存储 缓存 安全
Java并发基础之互斥同步、非阻塞同步、指令重排与volatile
在Java中,多线程编程常常涉及到共享数据的访问,这时候就需要考虑线程安全问题。Java提供了多种机制来实现线程安全,其中包括互斥同步(Mutex Synchronization)、非阻塞同步(Non-blocking Synchronization)、以及volatile关键字等。 互斥同步(Mutex Synchronization) 互斥同步是一种基本的同步手段,它要求在任何时刻,只有一个线程可以执行某个方法或某个代码块,其他线程必须等待。Java中的synchronized关键字就是实现互斥同步的常用手段。当一个线程进入一个synchronized方法或代码块时,它需要先获得锁,如果
26 0
|
2月前
|
缓存 NoSQL Java
java中复杂业务情况下的集合操作(增减集合同步数据)
java中复杂业务情况下的集合操作(增减集合同步数据)
29 0
|
2月前
|
安全 Java 程序员
Java中的并发编程:掌握同步机制与线程安全
【2月更文挑战第12天】 在现代软件开发领域,多线程和并发编程已成为提高应用性能和资源利用率的关键技术。Java语言提供了丰富的并发编程工具和框架,使得开发高效、可靠的并发应用成为可能。本文将深入探讨Java中的并发编程,着重介绍同步机制、线程安全概念及其在实际开发中的应用。通过对这些知识点的深入分析和案例演示,旨在帮助读者建立起对Java并发编程的全面理解,从而更好地设计和实现线程安全的高并发系统。
|
3月前
|
并行计算 Java API
深入理解Java多线程编程:创建、状态管理、同步与通信
深入理解Java多线程编程:创建、状态管理、同步与通信
|
3月前
|
数据采集 Java API
Java并发基础:CyclicBarrier全面解析!
CyclicBarrier的优点在于实现了线程间的相互等待与协同,确保所有线程在达到预定屏障点后才能继续执行,它支持屏障的重复使用,非常适合多轮次的任务同步,此外,CyclicBarrier还允许在屏障点执行特定操作,为复杂的多线程协作提供了便利。
Java并发基础:CyclicBarrier全面解析!
|
4月前
|
Java API 索引
Java 编程问题:十、并发-线程池、可调用对象和同步器4
Java 编程问题:十、并发-线程池、可调用对象和同步器
25 0
|
4月前
|
存储 缓存 算法
Java 编程问题:十、并发-线程池、可调用对象和同步器3
Java 编程问题:十、并发-线程池、可调用对象和同步器
33 0