美文网首页
如何控制某个方法允许并发访问线程的个数?

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

作者: 忧零520 | 来源:发表于2019-01-29 17:08 被阅读7次
    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():可以获取当前允许进入方法的线程数量

    相关文章

      网友评论

          本文标题:如何控制某个方法允许并发访问线程的个数?

          本文链接:https://www.haomeiwen.com/subject/qyixsqtx.html