如何控制某个方法允许并发访问线程的个数?

2019-01-29  本文已影响7人  忧零520
public class SemaphoreTestMain {

    static Semaphore sSemaphore = new Semaphore(6);

    public static void main(String[] args)  {

            final SemaphoreTestMain semaphoreTestMain = new SemaphoreTestMain();
            for (int i = 0 ; i < 1000;i++)
            {
               Thread myThread = new Thread()
                {
                    @Override
                    public void run() {
                        super.run();
                        try {
                            semaphoreTestMain.test();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                    }
                };
               myThread.setName("threat index:" + i);
                myThread.start();

            }

    }


    public void test() throws InterruptedException {
        sSemaphore.acquire();
        System.out.println(Thread.currentThread().getName() + "--in");
        Thread.sleep(1000);
        System.out.println(Thread.currentThread().getName() + "--out" );
        sSemaphore.release();

    }

}

static Semaphore sSemaphore = new Semaphore(6) 表示该方法最多允许几个线程访问
sSemaphore.acquire():调用一次,允许进入方法的线程数量减一
sSemaphore.release():调用一次,允许进入方法的线程数量加1
当允许进入方法的线程数量减为0的时候其他线程就等待,直到允许的线程数量大于0
sSemaphore.availablePermits():可以获取当前允许进入方法的线程数量

上一篇下一篇

猜你喜欢

热点阅读