一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。
运行类代码如下:
public class TestSemaphore {
public static void main(String[] args) {
SemaphoreService service = new SemaphoreService();
ThreadA[] threadAS = new ThreadA[10];
for (int i = 0; i < 10 ; i++) {
threadAS[i] = new ThreadA(service);
threadAS[i].start();
}
}
}
执行运行类结果如下:
15:35:18.112 [Thread-4] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-4-开始执行时间:1648884918094
15:35:18.112 [Thread-1] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-1-开始执行时间:1648884918093
15:35:18.112 [Thread-2] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-2-开始执行时间:1648884918094
15:35:18.128 [Thread-1] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-1-休眠时间:7 秒
15:35:18.129 [Thread-2] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-2-休眠时间:9 秒
15:35:18.112 [Thread-0] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-0-开始执行时间:1648884918093
15:35:18.129 [Thread-0] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-0-休眠时间:4 秒
15:35:18.113 [Thread-3] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-3-开始执行时间:1648884918094
15:35:18.129 [Thread-3] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-3-休眠时间:7 秒
15:35:18.129 [Thread-4] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-4-休眠时间:9 秒
15:35:18.144 [Thread-1] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-1-结束执行时间:1648884918144
15:35:18.144 [Thread-5] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-5-开始执行时间:1648884918144
15:35:18.144 [Thread-5] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-5-休眠时间:8 秒
15:35:18.145 [Thread-2] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-2-结束执行时间:1648884918145
15:35:18.145 [Thread-6] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-6-开始执行时间:1648884918145
15:35:18.145 [Thread-6] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-6-休眠时间:9 秒
15:35:18.145 [Thread-0] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-0-结束执行时间:1648884918145
15:35:18.145 [Thread-7] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-7-开始执行时间:1648884918145
15:35:18.146 [Thread-7] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-7-休眠时间:2 秒
15:35:18.147 [Thread-3] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-3-结束执行时间:1648884918147
15:35:18.147 [Thread-8] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-8-开始执行时间:1648884918147
15:35:18.148 [Thread-8] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-8-休眠时间:4 秒
15:35:18.148 [Thread-4] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-4-结束执行时间:1648884918148
15:35:18.149 [Thread-9] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-9-开始执行时间:1648884918149
15:35:18.150 [Thread-9] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-9-休眠时间:8 秒
15:35:18.151 [Thread-5] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-5-结束执行时间:1648884918151
15:35:18.169 [Thread-6] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-6-结束执行时间:1648884918169
15:35:18.170 [Thread-7] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-7-结束执行时间:1648884918170
15:35:18.170 [Thread-8] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-8-结束执行时间:1648884918170
15:35:18.176 [Thread-9] INFO com.ozx.concurrentprogram.semaphore.service.SemaphoreService - 线程名:Thread-9-结束执行时间:1648884918176
在代码中一共有10个许可,每次执行Semaphore.acquire(2)代码时消耗了2个,说明同一时间只有5个线程允许执行acquire()和release()之间的代码。