如何控制某个方法允许并发访问线程的个数?
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():可以获取当前允许进入方法的线程数量