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();
    }

  

原文地址:https://www.cnblogs.com/lewisat/p/11059316.html