import java.util.Random;
public class ThreadLogic implements Runnable {
private String name;
private int time;
private Random rand = new Random();
public ThreadLogic(String name) {
this.name = name;
this.time = rand.nextInt(1000);
}
public void run() {
try {
System.out.printf("%s is sleeping for %d \n", this.name, this.time);
Thread.sleep(this.time);
System.out.printf("%s is done.\n", this.name);
} catch(Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
Thread t1 = new Thread(new ThreadLogic("Thread-1"));
Thread t2 = new Thread(new ThreadLogic("Thread-2"));
Thread t3 = new Thread(new ThreadLogic("Thread-3"));
t1.start();
//t1.stop();
t2.start();
t3.start();
t1.stop();
System.out.println("State of Thread-1:"+" "+t1.getState());
System.out.println("State of Thread-2"+" "+t2.getState());
System.out.println("State of Thread-3"+" "+t3.getState());
System.out.println("isalive:"+t1.isAlive());
System.out.println("isalive:"+t2.isAlive());
System.out.println("isalive:"+t3.isAlive());
}
}
从上面的代码中,我如何在run()
方法中实现这样的逻辑:如果线程等待超过指定的时间,我想杀死该线程并检查其他两个线程发生的情况运行。当我执行上面的代码时,它给出了以下输出。
线程状态-1:已终止
螺纹状态-2 RUNNABLE
螺纹状态-3 RUNNABLE
的IsAlive:假
的IsAlive:真
的IsAlive:真
线程-2正在睡觉151
Thread-3正在睡觉384
线程-2完成。
完成了Thread-3。
答案 0 :(得分:0)
首先thread.stop()
应该不,因为它已被弃用。 (阅读here原因)
其次考虑使用ExecutorService.submit来执行一个线程;这将返回Future。在此future
对象上,您可以在手动等待所需的时间限制之后直接调用cancel
或调用get
,这会花费时间等待,然后再使用{在时间间隔到期后{1}},您可以取消该帖子。