转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6557874.html 

学过操作系统的对 信号量 这个词应该不陌生,它是用来进行进程间通信,控制对 临界区(即同步代码块) 的访问的。

Semaphore与syncrhoized、ReentrantLock加锁的方法不同,后两者是针对一把锁来实现同步互斥的(一个时刻只能有一个线程持有该锁),而Semaphore是一个共享锁,允许多个线程同时持有它,即同一时刻允许有多个线程同时操作临界区。只有当信号量为0时,申请进入临界区的线程才阻塞。

使用信号量分为:

1:创建信号量,指定有共享名额:e.g. final Semaphore semaphore = new Semaphore(3);

2:在需要进入临界区(同步代码块)时,申请获得信号量。如果获得成功,就会进入临界区执行,并且信号量共享名额会自动减一;如果信号量已经为0,则申请失败,阻塞线程:semaphore.acquire();

{临界区代码......}

3:执行完同步代码后,释放信号量,此时信号量+1:{临界区代码...;}

semaphore.release();

最新文章

  1. Jquery网页元素里面的操作以及JSON
  2. C++结构、共用体、枚举
  3. WebService 实例
  4. 本地wordpress博客系统安装搭建实践
  5. Ajax风格的一款网页Loading效果
  6. Delphi Register
  7. Harris Corner(Harris角检测)
  8. SHDP--Working With HBase(一)之基本介绍
  9. scipy安装问题
  10. AsyncTask onPreExecute方法用于在执行后台任务前做一些UI操作
  11. python图形用户
  12. 对某菠菜网站的一次渗透测试 heatlevel
  13. Idea中lombok不生效原因
  14. Oracle hint手动优化
  15. python如何进行内存管理的
  16. linux shell grep/awk/sed 匹配tab
  17. Android数据库安全解决方案,使用SQLCipher
  18. Event事件冒泡和事件捕获
  19. STL容器读书笔记
  20. CSS 超出隐藏实现限制字数的功能代码(多浏览器支持)

热门文章

  1. 使用开源库 SVPullToRefresh 实现上拉加载下拉刷新
  2. 闪电侠第四季/全集The Flash迅雷下载
  3. 维京传奇第四季/全集Vikings迅雷下载
  4. Asp.Net Core获取当前上下文对象
  5. CentOS6.4 xen4.2 虚拟机 桥接网络设置
  6. Guava之ImmutableMap使用示例
  7. maven单测生成覆盖率报告---Jacoco的使用
  8. C# DevExpress TabPane【转】
  9. WebView JS交互 JSBridge 案例 原理 MD
  10. centos7 开机自动连网