文档章节

java并发包里的semaphore的用法

汪林
 汪林
发布于 2014/06/12 16:18
字数 416
阅读 148
收藏 9

当然,火车上厕所里只有一个坑,只允许一个人进去。然而在笔者的童年时代都是一厕多坑的。

那么我们现在想象一下,如果一个厕所有4个坑,但是现在10个人上厕所,笔者就想在厕所门口挂4个灯,每进去一个人都要取走一盏灯进去,出来的时候,再把灯重新挂在厕所门口。这样,世界瞬间变的美好了。

代码:

package com.core.semaphore;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class SemaphoreTest {
 public static void main(String[] args) {
  
  //10上厕所的人
  final ExecutorService execu = Executors.newFixedThreadPool(10);
  
  //只有四个坑,我把厕所门口放4个信号灯
  final Semaphore s = new Semaphore(4);
  
  //模拟10个人上厕所,但是厕所里只有4个坑,只能容纳4个同时在里面
  for(int i=0;i<10;i++){
   final int NO=i+1;
   
   Runnable run = new Runnable() {
    
    @Override
    public void run() {
     try {
      
      //拿到信号灯
      s.acquire();
      
      System.out.println("线程:"+NO+"来了。。。");
      Thread.sleep((long) (Math.random()*10000));
      
      //拉完了,把信号灯重新挂在厕所门口
      System.out.println("线程:"+NO+"拉完了。。。");
      s.release();
      
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
   };
   
   execu.execute(run);
  }
  
  execu.shutdown();
 }
}

© 著作权归作者所有

共有 人打赏支持
汪林
粉丝 7
博文 19
码字总数 8847
作品 0
海淀
程序员
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

Java并发编程:CountDownLatch、CyclicBarrier和Semaphore   在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们...

明舞
2015/09/01
0
0
java8中的时间处理0 - api介绍

Java 8 Date Time API是我们java开发一直寻找的时间处理工具。java从一开始设计的时间类就让人头疼,好在现在终于有了java8。 为什么我们需要这套API 只要是有这么几个理由: Java的日期和时...

davelet
02/22
0
0
Java 并发工具包 java.util.concurrent 用户指南

译序 本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新:http://tutorials.jenkov.com/java-util-concurrent/index.html。 本指南已做成中英文对照阅读版的 pdf 文档,有兴趣的朋友...

pior
2015/10/26
0
0
【Java并发专题】27篇文章详细总结Java并发基础知识

努力的意义,就是,在以后的日子里,放眼望去全是自己喜欢的人和事! github:https://github.com/CL0610/Java-concurrency,欢迎题issue和Pull request。所有的文档都是自己亲自码的,如果觉...

你听___
05/06
0
0
读书笔记之《Java并发编程的艺术》-并发编程容器和框架(重要)

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea新建springCloud项目(5)- 订单服务

1.创建订单api,如下: 2.创建订单实现逻辑 3.新建订单、订单商品表 -- 订单 create table `order_master` ( `order_id` varchar(32) not null, `buyer_name` varchar(32) not null comment......

monroeCode
2分钟前
0
0
游戏开发经验谈(二):对战类全球服游戏的设计与实现

上篇文章《游戏开发经验谈(一):游戏架构里隐藏的五个坑及其应对方案》,我们主要讲解了游戏架构设计当中隐藏的一些坑及其应对方案,错过的小伙伴可以回溯之前的内容。本期内容,将会重点介...

UCloudTech
11分钟前
0
0
Mysql基本语法

一.联合主键 drop table CONTENT_AND_CATALOG;CREATE TABLE `tobebetter`.`CONTENT_AND_CATALOG` ( `ID` VARCHAR(120) NOT NULL , `CONTENT_ID` VARCHAR(120) , `CA......

我是菜鸟我骄傲
13分钟前
0
0
179. centos7 安装mariadb

1. centos7 中安装mariadb 1.1 执行安装 centos7 自带了mariadb yum -y install mariadb mariadb-server 1.2 启动mariadb systemctl start mariadb 1.3 设置开机启动 systemctl enable maria......

Lucky_Me
20分钟前
0
0
【AI实战】动手训练自己的目标检测模型(YOLO篇)

在前面的文章中,已经介绍了基于SSD使用自己的数据训练目标检测模型(见文章:手把手教你训练自己的目标检测模型),本文将基于另一个目标检测模型YOLO,介绍如何使用自己的数据进行训练。 ...

雪饼
26分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部