java信号量线程同步
时间: 2023-11-20 22:55:29 浏览: 85
Java信号量是一种线程同步的机制,它可以用来控制同时访问某个资源的线程数量。Semaphore类是Java提供的信号量实现类,它有两个常用的方法:acquire()和release()。acquire()方法会尝试获取一个许可,如果没有许可可用,则会阻塞线程直到有许可可用。release()方法会释放一个许可,如果有阻塞的线程正在等待许可,则会选择一个线程并将其唤醒。
以下是一个使用Semaphore实现线程同步的例子:
```java
import java.util.concurrent.Semaphore;
public class MyThread implements Runnable {
private Semaphore semaphore;
private int id;
public MyThread(Semaphore semaphore, int id) {
this.semaphore = semaphore;
this.id = id;
}
@Override
public void run() {
try {
semaphore.acquire();
System.out.println("Thread " + id + " is running");
Thread.sleep(1000);
System.out.println("Thread " + id + " is done");
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Semaphore semaphore = new Semaphore(2); // 最多允许2个线程同时运行
for (int i = 0; i < 5; i++) {
new Thread(new MyThread(semaphore, i)).start();
}
}
}
```
上述代码中,Semaphore的初始值为2,表示最多允许2个线程同时运行。在run()方法中,线程首先会尝试获取一个许可,如果没有许可可用,则会阻塞线程直到有许可可用。然后线程会执行一些操作,最后释放许可。在main()方法中,创建了5个线程并启动它们。
阅读全文