信号量,用来限制能同时访问共享资源的线程上限。
public static void main(String[] args) {// 1. 创建 semaphore 对象Semaphore semaphore = new Semaphore(3);// 2. 10个线程同时运行for (int i = 0; i < 10; i++) {new Thread(() -> {try {semaphore.acquire();} catch (InterruptedException e) {e.printStackTrace();}try {log.debug("running...");sleep(1);log.debug("end...");} finally {semaphore.release();}}).start();}}
输出
07:35:15.485 c.TestSemaphore [Thread-2] - running...07:35:15.485 c.TestSemaphore [Thread-1] - running...07:35:15.485 c.TestSemaphore [Thread-0] - running...07:35:16.490 c.TestSemaphore [Thread-2] - end...07:35:16.490 c.TestSemaphore [Thread-0] - end...07:35:16.490 c.TestSemaphore [Thread-1] - end...07:35:16.490 c.TestSemaphore [Thread-3] - running...07:35:16.490 c.TestSemaphore [Thread-5] - running...07:35:16.490 c.TestSemaphore [Thread-4] - running...07:35:17.490 c.TestSemaphore [Thread-5] - end...07:35:17.490 c.TestSemaphore [Thread-4] - end...07:35:17.490 c.TestSemaphore [Thread-3] - end...07:35:17.490 c.TestSemaphore [Thread-6] - running...07:35:17.490 c.TestSemaphore [Thread-7] - running...07:35:17.490 c.TestSemaphore [Thread-9] - running...07:35:18.491 c.TestSemaphore [Thread-6] - end...07:35:18.491 c.TestSemaphore [Thread-7] - end...07:35:18.491 c.TestSemaphore [Thread-9] - end...07:35:18.491 c.TestSemaphore [Thread-8] - running...07:35:19.492 c.TestSemaphore [Thread-8] - end...
