- 浏览: 1572050 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
更多介绍http://blog.csdn.net/java2000_wl/article/details/23556859
下面是模拟一个连接池,控制同一时间最多只能有50个线程访问。
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; /** * 信号灯 控制并发访问数量 * 只有 获取运行令牌(信号灯)后 ,才可以运行,当令牌(信号灯)使用完了,后面的访问 只能等着.直到有令牌被释放后,获取令牌才可以继续访问 */ public class SemaphoreTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ExecutorService service=Executors.newCachedThreadPool(); final Semaphore sp=new Semaphore(3,true); //先进来的先执行 for (int i = 0; i < 10; i++) { Runnable runnable=new Runnable() { @Override public void run() { try { sp.acquire();//获取通行证 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("线程"+Thread.currentThread().getName()+"进入,当前已有"+(3-sp.availablePermits())+"个并发"); try { //System.out.println(new Random().nextLong()); Thread.sleep(1000); } catch (Exception e) { // TODO: handle exception } System.out.println("线程"+Thread.currentThread().getName()+"即将离开"); sp.release(); System.out.println("线程"+Thread.currentThread().getName()+"已离开,当前已有"+(3-sp.availablePermits())+"个并发"); } }; service.execute(runnable); } } }
实用场景: Semaphore 分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得。 以一个停车场运作为例。为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆不受阻碍的进入,然后放下车拦,剩下的车则必须在入口等待,此后来的车也都不得不在入口处等待。这时,有一辆车离开停车场,看门人得知后,打开车拦,放入一辆,如果又离开两辆,则又可以放入两辆,如此往复。
下面是模拟一个连接池,控制同一时间最多只能有50个线程访问。
import java.util.UUID; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; public class TestSemaphore extends Thread { public static void main(String[] args) { int i = 0; while (i < 500) { i++; new TestSemaphore().start(); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } } /** * 控制某资源同时被访问的个数的类 控制同一时间最后只能有50个访问 */ static Semaphore semaphore = new Semaphore(50); static int timeout = 500; public void run() { try { Object connec = getConnection(); System.out.println("获得一个连接" + connec); Thread.sleep(300); releaseConnection(connec); } catch (InterruptedException e) { e.printStackTrace(); } } public void releaseConnection(Object connec) { /* 释放许可 */ semaphore.release(); System.out.println("释放一个连接" + connec); } public Object getConnection() { try {/* 获取许可 */ boolean getAccquire = semaphore.tryAcquire(timeout, TimeUnit.MILLISECONDS); if (getAccquire) { return UUID.randomUUID().toString(); } } catch (InterruptedException e) { e.printStackTrace(); } throw new IllegalArgumentException("timeout"); } }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 939public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2226经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5590package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 909import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1015/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 952//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1369import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 776import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2363import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 877// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1129import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 763import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1107import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3842import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 923/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 975import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1796Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 963/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2172package out; import ja ... -
java术语(PO/POJO/VO/BO/DAO/DTO)
2014-11-27 11:45 1939PO(persistant object) 持久 ...
相关推荐
Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有...
主要介绍了Java 信号量Semaphore的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Semaphore Semaphore分为单值和多值两种,前者只能被一个线程获得,...单个信号量的Semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁”,再由另一个线程释放“锁”,这可应用于死锁恢复的一些场
Java多线程Semaphore工具的使用详解.rar
主要介绍了Java并发编程Semaphore计数信号量详解,具有一定参考价值,需要的朋友可以了解下。
1.2 Semaphore概述 Semaphore的基本用法 2.1 创建Semaphore对象 2.2 acquire()方法 2.3 release()方法 控制资源访问数量 3.1 场景介绍 3.2 使用Semaphore控制资源访问 实现有界资源池 4.1 场景介绍 4.2 使用...
基于 Java 的并发信号量的计数信号量。 安装 通过 npm 安装模块: npm install async-semaphore 快速示例 // fairness false var Semaphore = require ( 'async-semaphore' ) ; var semaphore = new Semaphore ( ...
Semaphore的初步使用 Semaphore是什么,能做什么? Semaphore 是 synchronized 的加强版,作用是控制线程的并发数量。就这一点而言,单纯的synchronized 关键字是实现不了的。 直接看例子吧,这个例子包含3个类,一...
使用信号量(Semaphore)实现线程的同步
Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介绍Semaphore,Semaphore是用来管理一个资源池的工具,可以看成是个通行证
JAVA多线程--信号量(Semaphore)_.docx
java buffer using Semaphore a kind of example of writer and reader
深入浅出java Semaphore
在JAVA里面,我的理解是信号计数的作用,比如我想设置只能允许500个线程访问WebServer,那么如何控制500个数量哪?每来一个请求,就通过acquire()获取一个许可,然后数量自动减一,处理完成之后通过release()释放一...
Semaphore 源码解析 通过使用Semaphore可以在高并发场景进行限流控制处理
这篇文章主要介绍了python线程信号量semaphore使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.semaphore信号量原理 多线程同时运行,能提高程序的...
主要介绍了Java中Semaphore(信号量)的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
难堪的一次面试: 信号量Semaphore了解过吗?没有
关于Android变成中的信号量semaphore,在使用过程中我们往往搞不清楚其信号量的申请和使用。这里主要针对信号量初始值为零的情况做介绍,其他情况不做讨论。初始值为零的情况较少使用,部分代码中的这个情况往往让...
信号量(Semaphore)哲学家进餐问题(the dining philosophers problem)---------------------------程序