`

java.utils.concurrent之Semaphore

 
阅读更多

       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问题

    axis2解决 org.apache.axis2.util.JavaUtils.callStackToString问题

    axis2.jar 解决 org.apache.axis2.util.JavaUtils.callStackToString问题

    &lt;Call Stack = DEBUG_FRAME = org.apache.axis2.util.JavaUtils.callStackToString(JavaUtils.java:564) DEBUG_FRAME = org.apache.axis2.description.ParameterIncludeImpl.debugParameterAdd(ParameterIncludeImpl...

    java3d applet 入门小案例

    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 ...

    DevExpress.Utils3.dll

    该dll为DevExpress控件的DevExpress.Utils3.dll

    DevExpress.Utils3

    DevExpress.Utils3.DLL文件

    JAVA 3D 魔方源代码

    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 ...

    OpenStack工具库类oslo.utils.zip

    oslo.utils 库提供了常用的工具库类的功能,例如编码,异常处理,字符串操作和时间处理。 标签:osloutils

    JAVA3D关于魔方的代码

    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;

    sosnoski.jar【一个类似于java.utils功能包】

    一个类似于utils包的jar包,使用感觉更方便,可以试试........

    Bing.Utils:Bing.Utils工具库

    Nuget软件包包名称Nuget版本下载数Bing.Utils Bing.Utils.DateTime Bing.Utils.Drawing Bing.Utils.Http开发环境以及类库依赖以下是我们在项目开发和部署时使用的工具和组件,这个列表会经常更新。如果没有标注版本...

    ComUtils.java.zip

    ComUtils.java.zip

    python torch.utils.data.DataLoader使用方法

    主要介绍了python torch.utils.data.DataLoader使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    java-xmlbuilder-0.4-API文档-中文版.zip

    标签:java、utils、xmlbuilder、jamesmurty、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...

    Java.LJ.TimeHelper.utils-1.1.0.jar

    这是一款可以适配JavaScript支持的大部分格式的时间,并且会将其转换成java中的指定格式时间与数据库的时间类型对应,我们可以直接将获取的各种格式的时间参数传入指定的方法中不用关心实现自动帮助我们转换成数据库...

    Ionic.Utils.Zip 1.3-1.7版本

    内含如下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

    Ionic.Utils.Zip

    用于导出excel的dll,可以导出excel

    AS7_Utilities.zip

    Atmel.VsIde.AvrStudio.Utils.MemoryPressureReliever exception as7创建项目失败解决

    django 连接数据库出现1045错误的解决方式

    django.db.utils.OperationalError: (1045, “Access denied for user ‘账号’@’localhost’ (using password: YES)”) 错误。 这种错误指的是连接数据库时账号密码错误。 1.只需要修改setting.py文件里的...

    package com.ele.utils;

    package com.ele.utils;

    json-utils.py

    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_...

Global site tag (gtag.js) - Google Analytics