import java.util.concurrent.Semaphore; public class ResourceManagementTask implements Runnable { private Semaphore semaphore; private int resourceId; public ResourceManagementTask(Semaphore semaphore, int resourceId) { this.semaphore = semaphore; this.resourceId = resourceId; } @Override public void run() { try { semaphore.acquire(); System.out.println("Thread " + Thread.currentThread().getId() + " acquired resource " + resourceId); Thread.sleep(2000); System.out.println("Thread " + Thread.currentThread().getId() + " released resource " + resourceId); semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); } } } import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; public class Main { private static final int RESOURCE_COUNT = 5; private static final int THREAD_COUNT = 10; public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT); Semaphore semaphore = new Semaphore(RESOURCE_COUNT, true); for (int i = 0; i < THREAD_COUNT; i++) { executor.execute(new ResourceManagementTask(semaphore, i % RESOURCE_COUNT)); } executor.shutdown(); } }


上一篇:
下一篇:
切换中文