Java多线程的信号量

时间:2023-03-09 03:08:27
Java多线程的信号量

Java的信号量主要的作用是控制线程对资源的访问例如我一个线程池里面有100个线程等待执行,但是我允许最多同时运行5个线程,这5个线程只有其中一个线程执行完毕后,在线程池中等待的线程才能进入开始执行,我们可以这样设计程序:

/**
* 该示例展示了如何使用信号量
* @author Administrator
*
*/
public class MySemaphore { public static void main(String[] args) throws IOException, InterruptedException {
final Semaphore semaphore = new Semaphore(5);
ExecutorService exec = Executors.newCachedThreadPool();
for (int i = 0; i < 20; i++) {
final int num = i;
Runnable task = new Runnable() {
@Override
public void run() {
try {
semaphore.acquire();
System.out.println("计算器:" + num + " 可用信号量:" + semaphore.availablePermits());
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
exec.submit(task);
}
}
}

aaarticlea/png;base64,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" alt="" />