通过 Java 中的线程控制方法的执行



我需要有两个类,一个类有两个方法,每个方法都需要一段时间才能完全执行。第二个类被赋予信息,这些信息将决定第一个类中的两个方法中的哪一个将执行。然而,重要的是,如果第二个类(将在自己的线程中同时执行(决定执行两个方法中的另一个,则第一个类将直接执行另一个方法,而不必等待第一个方法完成。

如果类 A 具有两个方法,并且类 B 在不同的线程中并行决定要执行哪个方法,那么下面是一个示例:A 正在执行方法 1,这将需要一段时间才能返回。在执行方法 1 期间,类 B 决定方法 2 应该执行,这意味着类 A 应立即停止执行方法 1 并继续执行方法 2。

这可能吗?也许有中断?

谢谢

如果使类 A 实现可运行,然后通过让类 B 使用类 A 类型的对象创建新线程来执行其方法,则可以让类 B 在类 A 线程上调用中断方法。

以下是应该起作用的概述:

class ClassA implements Runnable {
    public volatile boolean switchToOther;
    @Override
    public void run() {
        switchToOther = false;
        try {
            method1();
        } catch (InterruptedException e) {
            // Restore the interrupted status
            Thread.currentThread().interrupt();
        }
        if (switchToOther) {
            method2();
        }
    }
    public void method1() throws InterruptedException {
        work();
    }
    public void method2() throws InterruptedException {
        otherWork();
    }
}
class ClassB implements Runnable {
    @Override
    public void run() {
        ClassA a = new ClassA();
        Thread t = new Thread(a);
        t.start();
        if (decideToSwitch()) {
            a.switchToOther = true;
            t.interrupt();
        }
    }
}

注意:

  1. InterruptedException可能会超出您的控制范围,因此您应该检查这是由于显式切换,
  2. 多个线程使用的switchToOther字段上的volatile
  3. 中断状态的重置,这是捕获InterruptedException时的标准习语

最新更新