多线程同步工具:Semaphore应用示例
Semaphore(信号量)是Java中用于多线程同步的一种工具。它类似于硬件中的锁,可以限制同时访问特定资源的线程数量。
以下是一个Semaphore应用的简单示例:
import java.util.concurrent.Semaphore;
public class SemaphoreExample {
private Semaphore mutex = new Semaphore(1); // 创建一个初始许可量为1的信号量
public void threadA() {
try {
mutex.acquire(); // 获取锁,如果当前没有可用许可量,则会阻塞直到有许可量可用
System.out.println("Thread A is running..."); // 执行线程任务
mutex.release(); // 释放锁,表示任务执行完毕可以由其他线程访问资源了
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void threadB() {
try {
mutex.acquire(); // 获取锁
System.out.println("Thread B is running..."); // 执行线程任务
mutex.release(); // 释放锁,表示任务执行完毕可以由其他线程访问资源了
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SemaphoreExample example = new SemaphoreExample();
Thread threadA = new Thread(example::threadA));
Thread threadB = new Thread(example::threadB));
threadA.start(); // 启动线程A
threadB.start(); // 启动线程B
// 等待所有线程执行完毕
threadA.join();
threadB.join();
System.out.println("All threads have finished running."); // 所有线程执行完毕后输出的消息
}
}
在这个示例中,我们创建了两个并发线程(Thread A 和 Thread B)分别执行各自的任务。使用Semaphore作为同步工具,限制了同时只有一个线程能访问共享资源。当一个线程完成其任务并释放锁时,另一个线程就可以获取锁并执行自己的任务了。
还没有评论,来说两句吧...