- 浏览: 1589915 次
- 来自: 上海
文章分类
- 全部博客 (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 998public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2282经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5654package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 986import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1055/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1008//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1417import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 815import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2397import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 925// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1172import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 802import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1145import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3892import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 965/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1022import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1840Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1004/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2230package out; import ja ... -
java术语(PO/POJO/VO/BO/DAO/DTO)
2014-11-27 11:45 1987PO(persistant object) 持久 ...
相关推荐
信号灯(Semaphore)是一种同步原语,由两个基本操作组成:`P(Wait)`和`V(Signal)`。`P`操作(尝试获取资源)会检查信号灯的计数值,如果为正,则减一并允许执行;若为零,则线程将被阻塞,等待其他线程释放资源...
Semaphore,顾名思义,就像是一个信号灯或通行证,用来管理一组有限的资源。在Java中,Semaphore类提供了对并发线程进行计数的许可管理,允许我们限制同时访问特定资源的线程数量。这在处理并发任务时非常有用,例如...
为了确保信号灯状态的正确切换,开发者可能会使用`synchronized`关键字、`wait()`和`notify()`方法,或者使用`java.util.concurrent`包中的高级并发工具,如`Semaphore`或`CyclicBarrier`。这些工具可以帮助避免竞态...
在Java编程语言中,我们可以利用多线程技术来模拟现实世界中的交通信号灯控制系统,即红绿灯。这个程序的设计可以让我们深入理解并发编程的概念,以及如何在Java中实现线程间的协调与通信。 首先,我们需要了解红...
Java提供了多种同步工具,如synchronized关键字、Semaphore(信号量)等,可以用来模拟交通信号灯的效果。例如,Semaphore可以限制同时访问筷子的数量,从而防止所有哲学家同时拿起筷子造成死锁。 项目的实现通常...
假设我们需要模拟交通信号灯,我们可以创建一个Runnable任务代表每个灯的状态,并使用synchronized确保同一时间只有一个灯亮: ```java class TrafficLight { private int state; // 红绿灯状态:0-红,1-黄,2-绿...
Semaphore-信号灯机制。 synchronized在静态方法和普通方法的区别。 怎么实现所有线程在等待某个事件的发生才会去执行。 CAS。 Hashtable是怎么加锁的。 HashMap的并发问题。 ConcurrenHashMap 介绍。 AQS。 如何...
Semaphore-信号灯机制。 synchronized在静态方法和普通方法的区别。 怎么实现所有线程在等待某个事件的发生才会去执行。 CAS。 Hashtable是怎么加锁的。 HashMap的并发问题。 ConcurrenHashMap 介绍。 AQS。 如何...
【交通信号灯设计与控制】采用多线程技术,模拟真实世界中东西方向和南北方向交通灯的交替运行。在Java中,可以利用Thread类或Runnable接口创建并发执行的任务,实现交通灯的定时切换。同时,为了确保交通灯状态的...
在Java中,`java.util.concurrent.Semaphore`类提供了信号灯功能,允许指定数量的线程同时访问特定资源,超过限制则等待。 4. **定时调度**:Java提供了`java.util.Timer`和`java.util.concurrent....
智能信号灯系统是一种利用先进的信息技术优化城市交通流量的解决方案。在这个项目中,"Intelligent_Semaphore_System"采用了一个代理系统来实现这一目标,它整合了Jade、SUMO(Simulation of Urban MObility)和...
每个方向的车辆需等待信号灯变绿才能通行,而信号灯的切换需要遵循一定的规则,确保交通安全。这个问题可以通过信号量来解决,设置不同的信号量代表不同方向的车辆和交通灯状态,通过P(获取信号量)和V(释放信号量...
Semaphore用于控制对共享资源的访问权限,类似于信号灯。 最后,Java并发编程还需要关注线程池的概念。Executor框架提供了灵活的线程管理和任务调度,通过ThreadPoolExecutor可以创建线程池,有效地管理和复用线程...
在本场景中,“多线程控制红绿灯变化”是一个典型的并发编程问题,旨在模拟现实生活中交通信号灯的交替工作模式。这个系统设计通常涉及两个主要线程,一个负责控制红灯,另一个负责控制绿灯,它们需要按照特定的时间...
【Rsemaforos1】项目是一个基于Java编程语言实现的交通信号灯模拟系统。这个系统主要用于演示并发控制和多线程概念,是学习Java并发编程的一个实例。在实际的交通管理中,信号灯系统需要精确地控制不同方向的交通流...
`CyclicBarrier`用于让一组线程等待彼此到达一个共同的屏障点,而`Semaphore`则用于控制对共享资源的访问权限,类似于信号灯机制。 `connector.jar`通常与应用服务器,如Tomcat、JBoss等关联,它是Java EE环境中...
8. **Semaphore**:信号灯,可以控制同时访问特定资源的线程数量,与互斥量类似,但更灵活,可以控制多个线程同时访问。 在实际编程中,选择哪种同步机制取决于具体的需求。例如,如果需要确保某个资源只被一个线程...
许可证,也称为信号灯或信号量,是多线程同步的一种机制,用于限制对共享资源的并发访问。它是一个整数值,当值为正时,表示可用许可证的数量;当值为零时,其他试图获取许可证的线程将被阻塞,直到有线程释放许可证...
4. **信号灯机制**:Java中没有直接的“信号灯”概念,但可以通过`Semaphore`类实现类似的信号量控制。 5. **实现所有线程等待某个事件**:可以使用`CountDownLatch`或`CyclicBarrier`等类来同步线程。 6. **CAS及其...