Java并发包之Semaphore用法
多线程中的同步概念就是排着队去执行一个任务,执行任务的是一个一个的执行,并不能并行执行,这样的优点是有助于程序逻辑的正确性,不会出现线程安全问题,保证软件的系统功能上的运行稳定性,
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();
}
浙公网安备 33010602011771号