Java并发编程(五)《并发工具类》
来源:互联网 发布:手机数据共享 编辑:程序博客网 时间:2024/05/17 04:56
- Java并发编程五并发工具类
- 1等待多线程完成的CountDownLatch
- 2同步屏障CyclicBarrier
- 3控制并发线程数的Semaphore
- 4线程间数据的切换Exchanger
Java并发编程(五)《并发工具类》
@(并发)
5.1.等待多线程完成的CountDownLatch
package com.tjp.thead.lock;import java.util.concurrent.CountDownLatch;/** * Created by TJP on 2017/1/4. */public class CountDownLatchTest { /** * CountDownLatch允许一个或多个线程等待其他线程完成操作后执行 * 共享模式,初始化同步状态为2 */ private static CountDownLatch cdl = new CountDownLatch(2); public static void main(String[] args) throws InterruptedException { new Thread(new Runnable() { public void run() { System.out.println(2); /** * countDown释放同步状态state-1 */ cdl.countDown(); System.out.println(Thread.currentThread().getName() + " call countDown ,release lock state-1 , state : " + 1); /** * countDown释放同步状态state-1 * 释放直到state=0,才tryReleaseShared成功,唤醒同步队列的头结点等待的线程 */ cdl.countDown(); System.out.println(Thread.currentThread().getName() + " call countDown ,release lock state-1 , state : " + 0); } }, "CountDownLatchTest-thread-01").start(); /** * state=0时,线程不会在此阻塞 */ cdl.await(); System.out.println("state=0,main thread start"); }}
5.2.同步屏障CyclicBarrier
5.3.控制并发线程数的Semaphore
package com.tjp.thead.lock;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;/** * Semaphore信号量并发组件:共享模式,控制并发线程数 * Created by TJP on 2017/1/5. */public class SemaphoreTest { private static final int THREAD_COUNT = 20; public static void main(String[] args) { //线程池 ExecutorService threadPool = Executors.newFixedThreadPool(THREAD_COUNT); //只能5个线程同时访问 final Semaphore semaphore = new Semaphore(5); // 模拟20个客户端同时访问 for (int i = 0; i < THREAD_COUNT; i++) { final int no = i; threadPool.execute(new Runnable() { public void run() { try { /** * acquire获取许可 state-1 * 当state<0,线程阻塞 */ semaphore.acquire(); System.out.println("Accessing : " + no); Thread.sleep(3000);//模拟业务操作 /** * release释放许可 state+1 * 当state<0,线程阻塞 */ semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); } } }); } threadPool.shutdown(); }}
5.4.线程间数据的切换Exchanger
阅读全文
0 0
- Java并发编程(五)《并发工具类》
- Java并发编程类学习五(同步工具)
- Java并发编程艺术 8 Java中的并发工具类
- java并发编程的艺术-并发工具类
- JAVA并发编程笔记五
- 五、Java 多线程 并发编程#
- java并发编程之五
- Java并发编程(五)--Condition
- Java高并发编程:同步工具类
- java并发编程:同步工具类
- 并发编程(四):并发工具类
- Java并发工具类
- Java 并发工具类
- Java并发工具类
- Java并发工具类
- java多线程与并发之java并发编程实践(五)
- java并发之并发工具类
- 【并发】并发工具类
- 面试中的那点事
- 事件,ajax,存储
- (六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
- Java并发编程(四)《锁原理》
- Angular2生命周期钩子函数
- Java并发编程(五)《并发工具类》
- 约塞夫问题:
- (七)策略模式详解
- (考试)2017年大一下学期C++期末考试题目一
- IDA动态调试so源码 F5伪代码查看
- JS-8-封装
- 人脸检测和识别及python实现系列(2)-- 相关API介绍与数据采集
- MPEG
- 数据分析(入门篇)-第三章-Show出你的数据-Part2(水晶易表)