java并发之同步工具类二之信号灯semaphore

来源:互联网 发布:淘宝收货地址管理 编辑:程序博客网 时间:2024/06/05 11:51

java中信号灯可以控制多个线程同时访问同一个资源的操作数量,注意这句话的重点在于“控制”二字。即可以为某种容器施加边界限制,也可以实现对某种资源的池化,比如线程池中限制最大运行5个线程,当有有超过5个线程同时来访问线程池的时候,必定有一个线程会处于阻塞等待状态。通过控制边界数量,可以避免过度线程占用内存而引发内存不足问题。其实现是通过一组运行在有界容器内的访问许可permit
比如商场的车库,车位有限,但是要在这里停车的数量大于车位,就必须有部分车辆要等待车库里面的车先开出来,在此期间将一直处于阻塞。且看下面代码。

import java.util.concurrent.Semaphore;/** * * @author Jerry * @date 2017/12/24 0024 */public class Garage {    public static void main(String[] args) {        Semaphore semaphore=new Semaphore(3);//停车场只允许停3辆车        System.out.println("车库未停任何车辆......");        for (int i=1;i<=5;i++){            Thread thread=new Thread(new Car("粤A"+i,semaphore));            thread.start();        }    }    static class Car implements Runnable{        private String name;        private Semaphore semaphore;        public Car(String name, Semaphore semaphore) {            this.name = name;            this.semaphore = semaphore;        }        @Override        public void run() {            try {                semaphore.acquire();//进入车库,获取入库证                System.out.println("+ "+name+"开进车库");                parking();                semaphore.release();//退出车库,退还入库证                System.out.println("- "+name+"已经离开车库");            } catch (InterruptedException e) {                e.printStackTrace();            }        }        private void parking() {            System.out.println(name+"停车中");            try {                Thread.sleep(5000);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}

运行结果如下,程序中限制了车位为3,但是停车数量为5,意味着总有两部车要等待前面的车辆空出车位才能入库。

车库未停任何车辆......+ 粤A1开进车库粤A1停车中+ 粤A2开进车库粤A2停车中+ 粤A3开进车库粤A3停车中- 粤A1已经离开车库+ 粤A4开进车库+ 粤A5开进车库- 粤A2已经离开车库粤A5停车中粤A4停车中- 粤A3已经离开车库- 粤A5已经离开车库- 粤A4已经离开车库
阅读全文
'); })();
1 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 湖南岳阳临湘 临溪而渔 临溪而渔溪深而鱼肥 临溪花园 弄石临溪坐全诗 临溪而渔的临 不登高山不知天之高不临深溪 临漳 临漳县 临漳镇 临漳限号 临漳招聘网 临漳景点 邯郸临漳 邯郸临漳00后初中小萝莉 临漳县乔五买女儿照片 临漳县长暴长青之死 临漳金康宾馆 河北邯郸临漳首富 临章 临潭 临潭冶力关如意农家乐 临潭西大寺 临潭宾馆 临潭酒店 临潭县 西安临潼 临潼 临潼石榴 临潼新区 临潼邮编 临潼斗宝 临潼房价 临潼车祸 临潼柿子 临潼招聘 临潼之窗 临潼博物馆 临潼区邮编 临潼旅游 临潼中学