多线程中的同步概念就是排着队去执行一个任务,执行任务的是一个一个的执行,并不能并行执行,这样的优点是有助于程序逻辑的正确性,不会出现线程安全问题,保证软件的系统功能上的运行稳定性,

Semaphore的作用主要是实现限制线程的并发数

package com.maven.info.semaphore;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Semaphore;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock; /**
* @program:
* @description:
* @author: 刘小品
* @create: 2019-06-20 10:38
*/
public class ListPoolDemo {
/* 可以有效的对并发执行任务的线程数进行限制,
这种功能可以应用在pool线程池技术中,
可以设置同时访问pool池中的数据的线程数量*/
private int poolMaxSize = 3;
private int semaphorePermits =5;
private List<String> list = new ArrayList<>(); private Semaphore concurrencySemaphore = new Semaphore(10);
private ReentrantLock lock = new ReentrantLock();
private Condition condition = lock.newCondition(); public ListPoolDemo(){
for (int i=0;i<poolMaxSize;i++){
list.add("superman_"+i);
} } public String get(){
String getString =null;
try { concurrencySemaphore.acquire();
lock.lock();
while (list.size()==0){
condition.await();
}
getString = list.remove(0);
lock.unlock(); }catch (Exception e){
e.printStackTrace();
}
return getString;
} public void put(String StringValue){
lock.lock();
list.add(StringValue);
condition.signalAll();
lock.unlock();
concurrencySemaphore.release();
}

  

最新文章

  1. Linux Buffers和Cached的区别(转)
  2. iOS UICollectionView之三(基本用法)
  3. EasyUI DataGrid 复选框
  4. iOS App 转移
  5. chrome浏览器无法设置打开特定网页
  6. 解决Execwb 导致 ado崩溃的问题。
  7. Lua开发环境搭建(Mac)
  8. xshell中启动linux图形界面
  9. PHP环境(apache,PHP,Mysql)详细配置方法
  10. VS2010 ,工程文件减肥
  11. mysql基础: mysql列类型--字符串
  12. xhtmlrenderer渲染pdf,中文换行
  13. 如何在Cocos2D 1.0 中掩饰一个精灵(五)
  14. socket通信的遇到的问题1
  15. uclibc,eglibc,glibc,Musl-libc之间的区别和联系
  16. zabbix3.0监控Windows服务器
  17. Ruby零碎笔记
  18. LeetCode - 503. Next Greater Element II
  19. 测试开发之前端——No9.HTML5中的视频/音频
  20. mysql ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

热门文章

  1. 小贝_redis list类型学习
  2. HDU 1542 Atlantis(矩形面积并)
  3. spark 针对决策树进行交叉验证
  4. windows 快捷调用
  5. rest_framework_HyperlinkedIdentityField
  6. 5.QT制作编译器,可以简单支持中文编程
  7. Kali linux 2016.2(Rolling)中metasploit的搜集特定地址的邮件地址
  8. python实现决策树C4.5算法(在ID3基础上改进)
  9. PHP——下载图片到本地代码
  10. PyCharm 2017 Mac 免注册版破解安装说明