暂停非循环线程

时间:2015-04-09 03:14:25

标签: java multithreading

我有一个线程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();
}

0 个答案:

没有答案