使用Semaphore控制共享资源的访问
import java.util.concurrent.Semaphore;
public class SemaphoreDemo {
public static void main(String[] args) {
// create a Semaphore with a permit count of 2
Semaphore semaphore = new Semaphore(2);
// create and start 3 threads
for (int i = 1; i <= 3; i++) {
new Thread(new Worker(i, semaphore)).start();
}
}
}
class Worker implements Runnable {
private int id;
private Semaphore semaphore;
public Worker(int id, Semaphore semaphore) {
this.id = id;
this.semaphore = semaphore;
}
public void run() {
try {
// acquire a permit
semaphore.acquire();
System.out.println("Thread " + id + " acquired a permit.");
// access shared resource
// simulate work by sleeping for 1 second
Thread.sleep(1000);
System.out.println("Thread " + id + " finished using the shared resource.");
// release the permit
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
此示例中,Semaphore被初始化为2个permit count,意味着同一时刻只有两个线程可以同时访问共享资源。