在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的信号量,让第一个线程开始执行。

每个线程执行完自己的任务后,再通过释放下一个信号量的方式,唤醒下一个线程。

这样就可以保证三个线程按照指定的顺序依次执行

java中用信号量的方法让三个线程按顺序执行

原文地址: https://www.cveoy.top/t/topic/iuhH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录