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

CountDownLatch CyclicBarrier

阅读更多

 

package com.ls.java_concurrency.threadpoolexecutor;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.Executors;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

public class ThreadPoolExecutorDemo {
	final BlockingQueue<Runnable> queue = new SynchronousQueue<Runnable>();
	final ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 600, 30,
			TimeUnit.SECONDS, queue, Executors.defaultThreadFactory(),
			new ThreadPoolExecutor.AbortPolicy());
	final AtomicInteger completedTask = new AtomicInteger(0);
	final AtomicInteger rejectedTask = new AtomicInteger(0);
	static long beginTime;
	static int count = 1000;
	
	public void start() {
		CountDownLatch latch = new CountDownLatch(count);
		CyclicBarrier barrier = new CyclicBarrier(count);
		for(int i=0; i<count; i++)
			new Thread(new TestThread(latch, barrier)).start();
		
	}
	
	class TestThread implements Runnable {
		private CountDownLatch latch;
		private CyclicBarrier barrier;
		public TestThread(CountDownLatch latch, CyclicBarrier barrier) {
			this.latch = latch;
			this.barrier = barrier;
		}
		
		public void run() {
			try {
				barrier.await();
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				executor.execute(new Task(latch));
			}catch(RejectedExecutionException e) {
				latch.countDown();
				System.out.println("被拒绝的任务数为:用地" + rejectedTask.incrementAndGet());
			}
		}
	}
	
	class Task implements Runnable {
		private CountDownLatch latch;
		public Task(CountDownLatch latch) {
			this.latch = latch;
		}
		
		public void run() {
			try {
				Thread.sleep(3000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("执行的任务数为:" + completedTask.incrementAndGet());
			System.out.println("任务耗时:" + (System.currentTimeMillis() - beginTime) + " ms");
			latch.countDown();
		}
	}
	
	public static void main(String[] args) {
		beginTime = System.currentTimeMillis();
		ThreadPoolExecutorDemo demo = new ThreadPoolExecutorDemo();
		demo.start();
	}

}
 

 

 

分享到:
评论

相关推荐

    CountDownLatch和CyclicBarrier用法实例大全

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具类,它们用于协调多个线程间的协作。这两个工具都是在`java.util.concurrent`包下,是Java并发库的重要组成部分。 **CountDownLatch** ...

    Java中的CountDownLatch与CyclicBarrier:深入理解与应用实践

    在Java的并发编程中,CountDownLatch和CyclicBarrier是两个非常重要的同步工具,它们用于协调多个线程的执行顺序。本文将详细介绍CountDownLatch和CyclicBarrier的工作原理、使用场景以及如何在实际项目中应用它们。...

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴.pdf

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴 java并发编程中CountDownLatch和CyclicBarrier是两个非常重要的线程控制和调度工具,经常被用于解决多线程程序设计中的线程等待问题。本文将对...

    java并发编程中CountDownLatch和CyclicBarrier的使用.pdf

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具,用于协调多个线程之间的交互。它们都属于java.util.concurrent包下的类,为多线程编程提供了强大的支持。 **CountDownLatch** 是一个...

    CountDownLatch 和 CyclicBarrier 的运用(含AQS详解)

    ### CountDownLatch 和 CyclicBarrier 的运用(含AQS详解) #### CountDownLatch **定义与特点:** CountDownLatch 是 Java 并发包中的一个重要组件,它主要用于解决“一个或多个线程等待其他线程完成任务”的问题。...

    java并发编程面试题分享给需要的同学.docx

    CountDownLatch CyclicBarrier Semaphore 什么是自旋锁(CAS,compare and swap)? CAS存在的问题 什么是读写锁? 谈谈并发编程三要素 简述Java内存模型(JMM) volatile关键字知道么,它是怎么实现的?(难点 重要) ...

    详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别

    在Java并发编程中,CountDownLatch和CyclicBarrier都是用于协调多线程间同步的重要工具,它们可以帮助开发者在特定条件满足时启动或者结束线程的执行。本文将详细探讨这两个类的内部实现机制以及它们在实际应用场景...

    JDK_seaswalker.tar.gz

    CountDownLatch CyclicBarrier ReadWriteLock ReentrantLock Socket UDP IO FileChannel Buffer URLConnection NIO Process HashMap LinkedHashMap TreeMap ConcurrentHashMap ...

    CountDownLatch、CyclicBarrier、Semaphore.md

    java 高并发应用场景

    多线程下的并发包:这些面试必问的,你都知道吗?

    文章目录ConcurrentHashMapCountDownLatchCyclicBarrierSemaphoreExchanger 在JDK的并发包里提供了几个非常有用的并发容器和并发工具类,供我们在多线程开发中进行使用。 并发包的来历: 在实际开发中如果不需要考虑...

    Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用

    在Java并发编程中,CountDownLatch、CyclicBarrier和Semaphore是三种重要的线程协作工具,它们都基于AbstractQueuedSynchronizer(AQS)框架来实现线程间的同步和协调。AQS是一个内置的锁和同步组件,它为构建高级...

    Java并发编程:CountDownLatch与CyclicBarrier和Semaphore的实例详解

    Java并发编程:CountDownLatch与CyclicBarrier和Semaphore的实例详解 Java并发编程是Java语言中的一种高级技术,用于处理多线程编程中的同步问题。Java 1.5中引入了几个高效的辅助类,包括CountDownLatch、...

    java jdk实列宝典 光盘源代码

    线程同步装置:semaphore countdownlatch cyclicbarrier exchanger; 17 java与xml 用dom处理xml文档; 用sax处理xml文档; 用xslt转换xml; 对象与xml的转换; 18 java mail 使用smtp协议发送简单邮件; 发送带附件的...

    Java并发编程之美_部分71

    本节主要讲解了Java并发包中线程同步器原理剖析,具体来说是 CountDownLatch 和 CyclicBarrier 的使用和原理剖析。 一、CountDownLatch CountDownLatch 是一个同步工具,它可以让一个线程等待其他线程完成某些操作...

    javaforkjoin源码-xxy-JavaStudy:xx-JavaStudy

    java forkjoin 源码 JDK源码学习: Java 容器 ArrayList LinkedList PriorityQueue ...CountDownLatch CyclicBarrier Semaphore ForkJoin FutureTask BlockingQueue Spring AOP IOC 面向面经复习 ​

    CountDownLatch练习

    1. **CountDownLatch与CyclicBarrier的区别**:CountDownLatch是一次性的,计数到零后无法重用;CyclicBarrier可以重置,允许多次同步点。 2. **如何避免死锁与饥饿**:在使用CountDownLatch时,要确保所有线程都能...

    Java concurrency之CountDownLatch原理和示例_动力节点Java学院整理

    下面我们将深入探讨CountDownLatch的原理、使用方法以及与CyclicBarrier的区别。 首先,CountDownLatch的构造函数接受一个整数参数`count`,这个值表示计数器的初始值。当这个计数器归零时,所有等待在`await()`...

    leetcode下载-newbie-notes:编码记录

    leetcode下载 newbie-notes 创建该项目是为了记录自己的一些笔记 ...CountDownLatch CyclicBarrier Semaphore Atomic 原子类型 Executor 线程池 ThreadLocal 用法 一些优秀的仓库 spring framework

    Java中的CountDownLatch类最全讲义

    目录: 简介 1.1 并发编程与线程同步 1.2 CountDownLatch概述 CountDownLatch的基本用法 2.1 创建CountDownLatch对象 2.2 await()方法 ...CountDownLatch与CyclicBarrier的对比 最佳实践与注意事项

Global site tag (gtag.js) - Google Analytics