日期:2014-05-20  浏览次数:20690 次

子线程如何interrupt主线程
子线程开始运行时,主线程开始sleep30秒。然后有两种情况:
1,子线程运行时间超过30秒,主线程在30秒过后中断子线程;
2,子线程30秒之内运行完成,则唤醒正在sleep中的主线程,继而主线程继续往下运行。

我用sleep实现了情况1,但是对情况2却没办法。

目前的思路是,在子线程运行后加一个.interupt()以中断在sleep中的主线程使其继续运行。但是,问题是,我找遍了也没找到主线程怎么表示,我是指主线程的代号是什么,所以没办法用。

代码如下:

//子线程
public class Clock extends Thread{

volatile boolean keepRunning = true;

public Clock(){

}

public void run() { 
while(keepRunning){
try {
                                                                  XXXXXXXX; //要执行的代码,运行时间可能不到30秒也可能超过30秒
?.interrupt();//问题即在此处,“?”代表主线程,“?”该是什么
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
    } 

public void pleaseStop() { keepRunning = false; } 

}

//主线程
public class xword{

public static void main(String[] args){
    XXXXX//
    
    Clock c= new Clock();
    c.start();
    try {  SECONDS.sleep(30); } // 等待30秒
    catch(InterruptedException ignore) {}
    c.pleaseStop(); //30秒后,强制停止子线程c
    
    XXXXXX//
}

}


或者还有其他什么办法?请简单点,多谢!
------最佳解决方案--------------------
LZ可以用子线程.join()方法,即子线程完后运行主线程 更多内容LZ自己百度把
------其他解决方案--------------------
自己顶,多谢了