文档章节

java并发包里的semaphore的用法

汪林
 汪林
发布于 2014/06/12 16:18
字数 416
阅读 156
收藏 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中高级面试必问之多线程TOP50(含答案)

以下为大家整理了今年一线大厂面试被问频率较高的多线程面试题,由于本人的见识局限性,所以可能不是很全面,也欢迎大家在后面留言补充,谢谢。 1、什么是线程? 2、什么是线程安全和线程不安...

老道士
08/28
0
0
新Java线程Semaphore:并行环境下访问竞争资源控制

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/83410270 新Java线程Semaphore:并行环境下访问竞争资源控制 Semaphore是从Java 1.5引...

zhangphil
10/27
0
0
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

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

明舞
2015/09/01
0
0
读书笔记之《Java并发编程的艺术》-并发编程容器和框架(重要)

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

Hi徐敏
2015/11/11
0
1
新Java并发线程控制:CyclicBarrier等待所有线程到达一个状态后执行一个线程动作(2)

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/83501612 新Java并发线程控制:CyclicBarrier等待所有线程到达一个状态后执行一个线程...

zhangphil
10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

window下安装maven

1.下载软件包: 2.解压到当前的安装路径: D:\Maven3.5.3 3.添加环境变量: 新建一个名为:MAVEN_HOME 填写解压路径:D:\Maven3.5.3 打开path,添加:%MAVEN_HOME%\bin 确定即可。 4.验证环境...

狼王黄师傅
10分钟前
0
0
聊聊flink的FsCheckpointStorage

序 本文主要研究一下flink的FsCheckpointStorage CheckpointStorage flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/CheckpointStorage.java /** * CheckpointStor......

go4it
32分钟前
2
0
makefile 常用函数

Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员。今天我们来学习下makefile的常用函数。 《GNU make》h...

科陆李明
今天
17
0
Android 报错 Could not find com.android.tools.build:aapt2:3.2.1-4818971.

报错信息: Could not find com.android.tools.build:aapt2:3.2.1-4818971.Searched in the following locations: file:/C:/Users/96110/AppData/Local/Android/Sdk/extras/m2reposito......

lanyu96
今天
9
0
我的Linux系统九阴真经

我的Linux系统九阴真经 在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行...

linuxCool
今天
34
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部