java中用信号量的方法让三个线程按顺序执行
在Java中,可以使用信号量(Semaphore)来控制多个线程按照指定顺序执行。下面是一个示例代码:
import java.util.concurrent.Semaphore;
public class SequentialExecution {
// 创建三个信号量,初始值都为0
private static Semaphore semaphore1 = new Semaphore(0);
private static Semaphore semaphore2 = new Semaphore(0);
private static Semaphore semaphore3 = new Semaphore(0);
public static void main(String[] args) {
Thread thread1 = new Thread(new Task1());
Thread thread2 = new Thread(new Task2());
Thread thread3 = new Thread(new Task3());
// 启动三个线程
thread1.start();
thread2.start();
thread3.start();
// 释放第一个线程的信号量,让它开始执行
semaphore1.release();
}
static class Task1 implements Runnable {
@Override
public void run() {
try {
// 等待第一个信号量释放
semaphore1.acquire();
System.out.println("Thread 1 is running");
// 释放第二个信号量
semaphore2.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
static class Task2 implements Runnable {
@Override
public void run() {
try {
// 等待第二个信号量释放
semaphore2.acquire();
System.out.println("Thread 2 is running");
// 释放第三个信号量
semaphore3.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
static class Task3 implements Runnable {
@Override
public void run() {
try {
// 等待第三个信号量释放
semaphore3.acquire();
System.out.println("Thread 3 is running");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
在这个示例中,我们创建了三个信号量semaphore1、semaphore2和semaphore3,初始值都为0。
在每个线程的run方法中,线程会尝试获取相应的信号量,如果信号量的值大于0,则线程可以继续执行,否则线程会被阻塞。
在主线程中,我们首先启动了三个线程,然后通过释放semaphore1的信号量,让第一个线程开始执行。
每个线程执行完自己的任务后,再通过释放下一个信号量的方式,唤醒下一个线程。
这样就可以保证三个线程按照指定的顺序依次执行
原文地址: https://www.cveoy.top/t/topic/iuhH 著作权归作者所有。请勿转载和采集!