Semaphore,译为信号量,它的作用就是维护一类可用资源,在多线程环境下保持资源竞争同步的作用。比如,一个停车场,只有三个车位,三个车位就是Semaphore,这时有10辆车要停进来,那么最多只能停进来3辆,其他的车必须等到有车离开停车场才能进去停车。直接来个程序吧。
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; public class CarParking implements Runnable { private static final int POSITION_COUNT = 2; private int idx; private Semaphore position; public static void main(String[] args) { ExecutorService parkingLot = Executors.newCachedThreadPool(); Semaphore parkingPositions = new Semaphore(3); for (int i = 0; i < 10; i++) { parkingLot.submit(new CarParking(i, parkingPositions)); } parkingLot.shutdown(); } public void run() { try { position.acquire(); pl("车" + idx + "获得一个车位,停好了!"); Thread.sleep((long)Math.random() * 1000); pl("车" + idx + "离开停车场了!"); position.release(); } catch (InterruptedException e) { e.printStackTrace(); } } public CarParking(int idx, Semaphore position) { this.idx = idx; this.position = position; } private static void pl(Object o) { System.out.println(o); } }
运行结果如下(不一定相同):
车0获得一个车位,停好了! 车2获得一个车位,停好了! 车1获得一个车位,停好了! 车2离开停车场了! 车1离开停车场了! 车0离开停车场了! 车3获得一个车位,停好了! 车4获得一个车位,停好了! 车4离开停车场了! 车3离开停车场了! 车5获得一个车位,停好了! 车7获得一个车位,停好了! 车6获得一个车位,停好了! 车7离开停车场了! 车5离开停车场了! 车8获得一个车位,停好了! 车6离开停车场了! 车8离开停车场了! 车9获得一个车位,停好了! 车9离开停车场了!
相关推荐
axis2解决 org.apache.axis2.util.JavaUtils.callStackToString问题
<Call Stack = DEBUG_FRAME = org.apache.axis2.util.JavaUtils.callStackToString(JavaUtils.java:564) DEBUG_FRAME = org.apache.axis2.description.ParameterIncludeImpl.debugParameterAdd(ParameterIncludeImpl...
import com.sun.j3d.utils.applet.MainFrame; import java.awt.BorderLayout; import com.sun.j3d.utils.universe.SimpleUniverse; import javax.media.j3d.*; import javax.vecmath.*; import ...
该dll为DevExpress控件的DevExpress.Utils3.dll
DevExpress.Utils3.DLL文件
import com.sun.j3d.utils.applet.MainFrame ; import java.awt.BorderLayout ; import com.sun.j3d.utils.universe.SimpleUniverse ; import javax.media.j3d.*; import javax.vecmath.*; import ...
oslo.utils 库提供了常用的工具库类的功能,例如编码,异常处理,字符串操作和时间处理。 标签:osloutils
import com.sun.j3d.utils.picking.*; import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.behaviors.vp.*; import com.sun.j3d.utils.applet.MainFrame;
一个类似于utils包的jar包,使用感觉更方便,可以试试........
Nuget软件包包名称Nuget版本下载数Bing.Utils Bing.Utils.DateTime Bing.Utils.Drawing Bing.Utils.Http开发环境以及类库依赖以下是我们在项目开发和部署时使用的工具和组件,这个列表会经常更新。如果没有标注版本...
ComUtils.java.zip
主要介绍了python torch.utils.data.DataLoader使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
标签:java、utils、xmlbuilder、jamesmurty、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...
这是一款可以适配JavaScript支持的大部分格式的时间,并且会将其转换成java中的指定格式时间与数据库的时间类型对应,我们可以直接将获取的各种格式的时间参数传入指定的方法中不用关心实现自动帮助我们转换成数据库...
内含如下8个版本 1.3.0.0 1.4.0.3 1.5.0.11 1.5.2.1 1.6.3.10 1.6.3.11 1.6.3.14 1.7.1.10
用于导出excel的dll,可以导出excel
Atmel.VsIde.AvrStudio.Utils.MemoryPressureReliever exception as7创建项目失败解决
django.db.utils.OperationalError: (1045, “Access denied for user ‘账号’@’localhost’ (using password: YES)”) 错误。 这种错误指的是连接数据库时账号密码错误。 1.只需要修改setting.py文件里的...
package com.ele.utils;
json_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_...