Java多线程同步问题:信号量示例
在Java中,信号量(Semaphore)是一种多线程同步工具。它能控制同时访问共享资源的线程数量。
下面是一个简单的信号量示例:
import java.util.concurrent.Semaphore;
public class SemaphoreExample {
private Semaphore semaphore = new Semaphore(1); // 初始化为允许1个线程
public void threadOne() throws InterruptedException {
System.out.println("Thread 1: Trying to acquire lock...");
semaphore.acquire(); // 获取锁
System.out.println("Thread 1: Lock acquired, executing task...");
doSomething();
System.out.println("Thread 1: Lock released back to semaphore.");
semaphore.release(); // 释放锁
}
public void threadTwo() throws InterruptedException {
System.out.println("Thread 2: Trying to acquire lock...");
semaphore.acquire(); // 获取锁
System.out.println("Thread 2: Lock acquired, executing task...");
doSomethingElse();
System.out.println("Thread 2: Lock released back to semaphore.");
semaphore.release(); // 释放锁
}
public void startThreads() throws InterruptedException {
new Thread(threadOne)).start(); // 启动线程1
new Thread(threadTwo)).start(); // 启动线程2
}
private void doSomething() { // 你的任务,这里只是一个示例
try {
Thread.sleep(500); // 模拟一些耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 1: Operation completed.");
}
private void doSomethingElse() { // 另一个任务,这里只是一个示例
try {
Thread.sleep(300); // 模拟一些耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 2: Operation completed.");
}
public static void main(String[] args) throws InterruptedException {
SemaphoreExample example = new SemaphoreExample();
example.startThreads(); // 启动线程
}
}
在这个例子中,我们创建了两个线程(threadOne和threadTwo),它们通过信号量semaphore来控制对共享资源的访问。Semaphore(1)
表示允许一个线程执行任务。
还没有评论,来说两句吧...