我需要有两个类,一个类有两个方法,每个方法都需要一段时间才能完全执行。第二个类被赋予信息,这些信息将决定第一个类中的两个方法中的哪一个将执行。然而,重要的是,如果第二个类(将在自己的线程中同时执行(决定执行两个方法中的另一个,则第一个类将直接执行另一个方法,而不必等待第一个方法完成。
如果类 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();
}
}
}
注意:
-
InterruptedException
可能会超出您的控制范围,因此您应该检查这是由于显式切换,
从 - 多个线程使用的
switchToOther
字段上的volatile
, - 中断状态的重置,这是捕获
InterruptedException
时的标准习语