大数据中的信号量机制的应用

来源:互联网 发布:ubuntu默认root登录 编辑:程序博客网 时间:2024/04/30 12:32

信号量机制:针对用户量比较多,处理能力有限

应用一:

class Keng//坑位--资源{    final Semaphore  sp=new Semaphore(10,true);//信号量,3个新号   10个信号量  坑(资源)最多有10个         void getitem() throws InterruptedException//获取资源     {       // sp.acquire();// 占坑  一次占用一个坑        sp.acquire(5);//释放 团体。个人 //一次一个线程申请(使用)5个资源,故每次只能有2个线程      }    void freeitem()//释放资源    {//    sp.release();//释放坑        sp.release(5);//一次申请5个资源,一次也要释放5个资源            }    public  void  tKeng(String name)    {        //System.out.println(sp.getQueueLength());//多少线程等待在等待         System.out.println("可以使用的资源个数是:"+sp.availablePermits());//还有多少可用坑位 资源        try         {            this.getitem();            System.out.println(Thread.currentThread().getName()+Thread.currentThread().getId()+"  "+name                    +"  使用ing");            //Thread.sleep((int)   (Math.random()*10000)     );//每个线程使用完释放资源的时间是随机数            Thread.sleep(5000   ); //没次休眠5s,同时使用完资源,同时释放资源        }         catch (InterruptedException ex)         {            Logger.getLogger(Keng.class.getName()).log(Level.SEVERE, null, ex);        }        finally        {             System.out.println(Thread.currentThread().getName()+Thread.currentThread().getId()+"   "+name+"  使用ed");             this.freeitem();        }    }}class Boy implements Runnable{    Keng  keng=null;    String name="";          public Boy(Keng  keng,String name)     {         this.keng=keng;         this.name=name;     }    public void run()    {        this.keng.tKeng(name);    }}public class SimpleSemaphore{    public static void main(String[] args)    {        Keng keng=new Keng();        Set<Thread> boys=new HashSet<>();//Thread 放到HashSet中        //开启25个线程        for(int i=0;i<5;i++)        {            boys.add(new  Thread ( new  Boy(keng,"第VIP "+i+"号")  )        );        }        for(int i=0;i<20;i++)        {            boys.add(new  Thread ( new  Boy(keng,"第"+i+"号")  )        );        }                for(Thread th:boys)// 遍历HashSet 分别开启进程        {            th.start();        }            }}



0 0