我有一个线程A充当GUI或CLI,产生另一个线程B.线程B的运行方法如下所示
public void run() {
doSomething(); //Might take 30 seconds
crazyCalculation(); //Might take 30-60 minutes
doTheLastThingBeforeExit(); //Might take another 30 seconds
}
我的问题是:是否可以暂停从线程A执行线程B(到外部(让用户查看日志)分析当前结果)然后在用户完成分析时恢复线程B?这是否可以在不修改线程B的内容的情况下实现? (实现被弃用的Thread.suspend()方法的其他一些方法)
如果必须修改线程B的内容(我想用wait()和notify()),它们应该在线程B中的哪个位置?我应该修改crazyCalculation()以具有多个阶段并且我的运行方法是
public void run() {
doSomething();
for (int i = 0; i < numberOfStage; i++) {
crazyCalculationAtStage(i); //Broken down to smaller chunk 1 minute each stage
synchronized (this) {
if (isLocked()) {
myLock.wait();
}
}
}
doTheLastThingBeforeExit();
}