JDK并发包---(7)允许多个线程同时访问的:信号量(Semaphore)
来源:互联网 发布:网络运维主要做什么 编辑:程序博客网 时间:2024/05/18 01:55
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;public class SemaphoreDemo implements Runnable {final Semaphore semaphore = new Semaphore(5);@Overridepublic void run() {try {semaphore.acquire();Thread.sleep(2000); //模拟耗时操作System.out.println(Thread.currentThread().getName() + ": done!");} catch (InterruptedException e) {e.printStackTrace();} finally {semaphore.release();}}public static void main(String args[]) {ExecutorService executorService = Executors.newFixedThreadPool(20);final SemaphoreDemo semaphoreDemo = new SemaphoreDemo();for (int index = 0; index < 20; index++) {executorService.submit(semaphoreDemo);}executorService.shutdown();}}
以下是JDK官方文档给的一个例子:
import java.util.concurrent.Semaphore;public class Pool {private static final int MAX_AVAILABLE = 100;private final Semaphore available = new Semaphore(MAX_AVAILABLE, true);public Object getItem() throws InterruptedException {available.acquire();return getNextAvailableItem();}public void putItem(Object x) {if (markAsUnused(x))available.release();}// Not a particularly efficient data structure; just for demoprotected Object[] items = new Object[MAX_AVAILABLE];protected boolean[] used = new boolean[MAX_AVAILABLE];protected synchronized Object getNextAvailableItem() {for (int i = 0; i < MAX_AVAILABLE; ++i) {if (!used[i]) {used[i] = true;return items[i];}}return null; // not reached}protected synchronized boolean markAsUnused(Object item) {for (int i = 0; i < MAX_AVAILABLE; ++i) {if (item == items[i]) {if (used[i]) {used[i] = false;return true;} elsereturn false;}}return false;}}
0 0
- JDK并发包---(7)允许多个线程同时访问的:信号量(Semaphore)
- Semaphore 允许多个线程同时访问
- 《并发编程》--11.允许多个线程同时访问的信号量Semaphpre
- java Semaphore信号亮-允许多个任务同时访问这个资源--thinking in java21.7.6
- Java: 使用信号量(Semaphore)保护多个共享资源的访问
- 使用Semaphore控制某个方法允许并发访问的线程的个数
- 并发包-Semaphore实现线程的通信
- java高并发程序设计总结四:JDK并发包之信号量Semaphore
- Semaphore (信号量)管理访问数据的线程个数
- 线程池ExecutorService 中并发数的(引入信号量Semaphore)控制执行
- Java并发包之Semaphore信号量
- 多线程Demo-Semaphore 控制同时访问资源的线程个数
- 线程之间的信号量 Semaphore
- 线程(七)信号量 Semaphore
- [笔记][Java7并发编程实战手册]3.2 资源的并发访问控制Semaphore信号量
- 控制并发访问的线程数 Semaphore 信号灯
- Java并发库(十四):控制线程访问数量Semaphore
- java并发之Semaphore(计数信号量)
- aop配置了还是报错
- DateTime.Compare(t1,t2)比较两个日期大小
- PHP基础之文件的上传
- HttpClient使用详解
- 使用【SpringMVC】的【Controller注解】
- JDK并发包---(7)允许多个线程同时访问的:信号量(Semaphore)
- R+工业级GBDT︱微软开源 的LightGBM(R包已经开放)
- centos 7 lvs 负载均衡搭建
- xx-net 的下载和安装,mac系统的安装
- eclipse ADT重写方法时解决参数arg0, arg1可读性
- Centos 7 伪分布式安装Hadoop2.6和Hbase0.94
- shopnc nodejs安装
- 程序员面试金典第一章:数组与字符串(5) 基本字符串压缩
- php中curl的详细解说