我需要有两个类,一个类有两个方法,每个方法都需要一段时间才能完全执行。第二个类被赋予信息,该信息将决定第一类中的两个方法中的哪一个将执行。但重要的是,如果第二个类(将在其自己的线程中同时执行)决定两个方法中的另一个应该执行,则第一个类将直接执行另一个方法而不必等待第一个完成。
如果A类有两个方法,并且B类在另一个线程中并行决定执行哪个方法,那么这里是一个例子: A正在执行方法1,需要一段时间才能返回。在方法1的执行过程中,B类决定方法2应该执行,这意味着A类应该立即停止执行方法1并继续执行方法2.
这可能吗?也许有中断?
感谢
答案 0 :(得分:4)
如果你让A类工具运行,然后通过让B类创建一个带有类A类对象的新线程来执行它的方法,你可以让B类在A类线程上调用中断方法。
答案 1 :(得分:2)
以下是应该有效的概要:
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
可能超出您的控制范围,所以您应该检查它是否由于显式切换,volatile
字段上的switchToOther
InterruptedException