练习题

控制某个方法允许并发访问线程个数

2020-07-11  本文已影响0人  老奶猹
class  
{
    //声明一个semaphore对象
    static Semaphore semaphore = new Semaphore(5,true);
    public static void main(String[] args) 
    {
        for(int i=0;i<100;i++){
             new Thread(new Runnable (){
                 @Override
                     public void run(){
                       test();
                 }
             }).start();
        }
}

      public static void test(){
        //申请一个请求
        try
        {
            semaphore.acquire();
        }
        catch (InterruptedException e1)
        {
            e1.printStackTrace();
        }

        try
        {
            Thread.sleep(1000);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }

        //释放一个请求
        semaphore.release();
      }
}

可以使用Semaphore控制,构造函数创建了一个Semaphore对象,并且初始化了5个信号。这样的效果是控件 test 方法最多只能有 5 个线程并发访问,对于 5 个线程时就排队等待,走一个来一下。请求一个信号(消费一个信号),如果信号被用完了则等待,释放一个信号,释放的信号新的线程就可以使用了。

上一篇下一篇

猜你喜欢

热点阅读