`

java并发工具类

 
阅读更多
1、Semaphore
信号灯。。。。通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

public class SemaphoreTest {

	public static void main(String[] args) {
		ExecutorService threadPool = Executors.newCachedThreadPool();
		final Semaphore semaphore = new Semaphore(3);
		for(int i=1;i<=10;i++){
			Runnable r = new Runnable() {
				public void run() {
					try {
						semaphore.acquire();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println("线程" + Thread.currentThread().getName() + 
							"进入,当前已有" + (3-semaphore.availablePermits()) + "个并发");
					
					try {
						Thread.sleep((long)(Math.random()*10000));
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println("线程" + Thread.currentThread().getName() + 
							"即将离开");
					semaphore.release();
					System.out.println("线程" + Thread.currentThread().getName() + 
							"已离开,当前已有" + (3-semaphore.availablePermits()) + "个并发");
				}
			};
			threadPool.execute(r);
		}
	}
}




2、CyclicBarrier
一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。
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()*10000));	
						System.out.println("线程" + Thread.currentThread().getName() + 
								"即将到达集合地点1,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));						
						cb.await();
						
						Thread.sleep((long)(Math.random()*10000));	
						System.out.println("线程" + Thread.currentThread().getName() + 
								"即将到达集合地点2,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));
						cb.await();	
						Thread.sleep((long)(Math.random()*10000));	
						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();
	}
}



3、CountDownLatch
在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
public class CountdownLatchTest {

	public static void main(String[] args) {
		ExecutorService service = Executors.newCachedThreadPool();
		final CountDownLatch cdOrder = new CountDownLatch(1);
		final CountDownLatch cdAnswer = new CountDownLatch(3);		
		for(int i=0;i<3;i++){
			Runnable runnable = new Runnable(){
					public void run(){
					try {
						System.out.println("线程" + Thread.currentThread().getName() + 
								"正准备接受命令");						
						cdOrder.await();
						System.out.println("线程" + Thread.currentThread().getName() + 
						"已接受命令");								
						Thread.sleep((long)(Math.random()*10000));	
						System.out.println("线程" + Thread.currentThread().getName() + 
								"回应命令处理结果");						
						cdAnswer.countDown();						
					} catch (Exception e) {
						e.printStackTrace();
					}				
				}
			};
			service.execute(runnable);
		}		
		try {
			Thread.sleep((long)(Math.random()*10000));
		
			System.out.println("线程" + Thread.currentThread().getName() + 
					"即将发布命令");						
			cdOrder.countDown();
			System.out.println("线程" + Thread.currentThread().getName() + 
			"已发送命令,正在等待结果");	
			cdAnswer.await();
			System.out.println("线程" + Thread.currentThread().getName() + 
			"已收到所有响应结果");	
		} catch (Exception e) {
			e.printStackTrace();
		}				
		service.shutdown();

	}
}

分享到:
评论

相关推荐

    java并发工具类(CountDownLatch+Semaphore+Exchanger)

    Java并发工具类是Java并发编程中的重要组成部分,其中包括了多种实用的工具,如CountDownLatch、Semaphore和Exchanger,这些工具类极大地简化了多线程环境下的同步和协调问题。 1. **CountDownLatch**: ...

    Java并发工具类示例

    本文将详细解析Java并发工具类,并通过示例代码介绍`CountDownLatch`、`CyclicBarrier`、`Phaser`、`Semaphore`和`ThreadLocal`的用法。 1. **CountDownLatch** `CountDownLatch`是一个计数器,通常用于等待多个...

    java并发之并发工具类

    Java 并发工具类详解 Java 并发工具类是 Java 并发编程中的一种重要工具,用于协调线程之间的并发执行。 Java 并发工具类中有很多种,今天我们主要介绍四种:CyclicBarrier、CountDownLatch、Semaphore 和 ...

    CountDownLatch、Semaphore等4大并发工具类详解

    "Java 并发工具类详解" Java 并发工具类是 Java 并发编程的核心组件之一,提供了多种同步结构和并发容器,帮助开发者创建高效、可靠的并发程序。本文将详细介绍 Java 并发工具类的四大类:CountDownLatch、...

    Java并发编程实践.pdf

    #### 三、Java并发工具类 ##### 3.1 原子类 Java并发工具包中提供了原子类,如AtomicInteger、AtomicLong等,它们可以实现对整型或长整型变量的原子操作,无需显式加锁即可保证线程安全。 ##### 3.2 阻塞队列 阻塞...

    Java并发工具包

    九、并发工具类 包括 TimeUnit、ThreadLocalRandom 和 Phaser 等,这些工具类提供了在并发编程中常用的实用功能,如时间单位转换、随机数生成和同步阶段控制。 总结来说,Java并发工具包提供了丰富的工具和机制,...

    Java并发编程从入门到精通(pdf)(附源码)

    接着,书中将深入探讨Java并发工具类,如Executor框架、Semaphore信号量、CyclicBarrier和CountDownLatch等,这些工具在实际项目中有着广泛的应用,学习它们能帮助开发者更好地控制和协调并发任务。 此外,书中的...

    java并发编程实践

    #### 四、Java并发工具类 Java并发编程中常用的一些工具类,这些工具类提供了更高级别的并发功能。 ##### 4.1 Executor框架 - **ExecutorService**:一个高级的线程池接口,提供了一系列的线程管理和任务执行方法。...

    Java并发工具类LongAdder原理实例解析

    Java并发工具类LongAdder原理实例解析 Java并发工具类LongAdder是Java 8中引入的一种高性能的并发工具类,用于解决高并发情况下的计数器更新问题。LongAdder的出现是为了解决AtomicLong在高并发情况下的性能问题。...

    Android-Java并发工具类库

    在Android开发中,Java并发工具类库扮演着重要的角色,特别是在多线程和异步处理的场景下。这个名为“Xiaofei-it-Concurrent-Utils-829a450”的压缩包可能包含了一些优化和扩展了Java标准并发库(java.util....

    Java并发编程全景图.pdf

    Java并发工具类扩展了基本的并发功能,例如CountDownLatch、CyclicBarrier、Semaphore和Phaser提供了不同场景下的同步支持。Exchanger用于两个线程之间交换数据。 12. 硬件和操作系统支持 Java并发编程的成功在很大...

    JAVA并发编程实践

    #### 1.2 Java并发工具类 - **Thread类**:Java中创建线程的基本方式,通过继承Thread类或实现Runnable接口来创建线程。 - **Executor框架**:提供了一种更灵活的方式来管理线程,包括ThreadPoolExecutor等类。 - **...

    Java并发编程的艺术

    #### 八、Java并发工具类详解 第八章关注于Java提供的并发工具类,这些工具类包括CountDownLatch、CyclicBarrier、Semaphore等,它们是Java并发编程库的重要组成部分。本章不仅详细介绍了这些工具类的功能和用途,...

    JAVA并发编程实践(中文)含源码

    最后,Java并发工具类,如Semaphore(信号量)、CyclicBarrier(回环栅栏)、CountDownLatch(计数器门闩)和Exchanger(交换器),提供了更高级的同步和协调机制,有助于解决复杂并发场景的问题。 通过阅读《JAVA...

    Java并发编程事件 mobi kindle版

    4. **并发工具类**:深入剖析了Java并发工具类的实现原理,如ConcurrentHashMap、LinkedBlockingQueue、ConcurrentSkipListMap等,并提供了实际应用示例。 5. **线程池**:详细解析了Executor框架,包括线程池的...

    java并发工具包

    下面将详细探讨Java并发工具包中的主要类和接口,以及它们在并发编程中的作用。 1. **Executor框架**:Java并发工具包的核心是Executor框架,它基于`java.util.concurrent.Executor`接口。Executor接口定义了一个...

    JAVA并发编程实践.pdf

    ### Java并发工具类 #### 1. 线程安全类 - **Vector**:早期的线程安全集合。 - **HashTable**:线程安全的Map实现。 - **ConcurrentHashMap**:高效的线程安全Map。 - **CopyOnWriteArrayList**:写时复制策略实现...

    Java并发编程:设计原则与模式2中文版

    此外,书中还深入讨论了Java并发工具类,如ExecutorService、Future、BlockingQueue、Semaphore等。这些工具是构建并发程序的重要组件,了解它们的特性和使用场景,能够帮助开发者更好地组织并发任务,优化系统资源...

    Java多线程之并发工具类

    Java并发工具类是Java多线程编程中必不可少的一部分,它们为开发者提供了更加高效和灵活的线程同步机制。本文将详细介绍三个重要的并发工具类:CountDownLatch、CyclicBarrier和Semaphore。 首先,CountDownLatch是...

Global site tag (gtag.js) - Google Analytics