控制某个方法允许并发访问线程个数
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 个线程时就排队等待,走一个来一下。请求一个信号(消费一个信号),如果信号被用完了则等待,释放一个信号,释放的信号新的线程就可以使用了。