zoukankan      html  css  js  c++  java
  • 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();
        }
    

      

  • 相关阅读:
    mysql同步故障解决
    linux环境变量
    shell脚本中的交互式输入自动化
    ERROR oslo_service.service PlacementNotConfigured 解决办法
    openstack源
    rabbitmq——用户管理
    linux lvm扩容
    UWB DWM1000 开源项目框架 之 信号强度指示RSSI
    UWB DWM1000 开源项目框架 之 温度采集
    UWB DWM1000 开源项目框架
  • 原文地址:https://www.cnblogs.com/lewisat/p/11059316.html
Copyright © 2011-2022 走看看