Thread的interrupt()没终止线程 本帖最后由 valid25f 于 2012-08-30 10:09:11 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class Text implements Runnable { boolean panduan = false; public boolean isPanduan() { return panduan; } public void setPanduan(boolean panduan) { this.panduan = panduan; } public void run() { while (panduan) { System.out.println(Thread.currentThread().getName()); } } public static void main(String[] args) throws InterruptedException { Text text1 = new Text(); Thread t1 = new Thread(text1); text1.setPanduan(true); t1.start(); Thread.sleep(2000); t1.interrupt(); text1.setPanduan(false); Text text2 = new Text(); Thread t2 = new Thread(text2); text2.setPanduan(true); t2.start(); }} 首先,每个线程内部都有一个boolean型变量表示线程的中断状态,true代表线程处于中断状态,false表示未处于中断状态。而interrupt()方法的作用只是用来改变线程的中断状态(把线程的中断状态改为true,即被中断)。A线程调用wait,sleep,join方法,这时B线程调用了A的interrupt方法而抛出的InterruptedException是wait,sleep,join方法内部不断检查中断状态的值,自己抛出来的,并不是直接由interrupt方法直接引起的。抛出InterruptedException以后,线程又会回到非中断状态(false)。因此interrupt()方法代表着外界希望中断此线程,只是希望,具体怎么处理还是线程内部来做,一般情况下interrupt()方法可以使处于阻塞状态的线程抛出InterruptedException从而结束阻塞状态。 Thread.sleep(2000);t0.interrupt();这个是在主线程里面执行的,共3个线程使用CPU资源,随机执行其中一个,那个main线程有可能就执行不到 http://www.ticmy.com/?p=31 Java生产者消费者问题 IT工作者去哪个地方工作比较好!! 请问httpSessionListener从哪里注册 谁写的结构如此差的程序,该回家种田了 关于序列化的一个问题(effictive java里的) 加密算法之三重DES算法(C源程序) 100分求Rational XDE Developer for Java V2003版下载 哪里有oracle 9i的下载,提供者100分。 一条关于随机数的程序?请帮忙解决 jBuilder4中的照齐问题 改怎么拼成一个xml形式的字符串,在线等 新手问个sql 注入问题。
boolean panduan = false;
public boolean isPanduan() {
return panduan;
}
public void setPanduan(boolean panduan) {
this.panduan = panduan;
}
public void run() {
while (panduan) {
System.out.println(Thread.currentThread().getName());
}
}
public static void main(String[] args) throws InterruptedException {
Text text1 = new Text();
Thread t1 = new Thread(text1);
text1.setPanduan(true);
t1.start();
Thread.sleep(2000);
t1.interrupt();
text1.setPanduan(false);
Text text2 = new Text();
Thread t2 = new Thread(text2);
text2.setPanduan(true);
t2.start();
}
}
抛出InterruptedException以后,线程又会回到非中断状态(false)。因此interrupt()方法代表着外界希望中断此线程,只是希望,具体怎么处理还是线程内部来做,一般情况下interrupt()方法可以使处于阻塞状态的线程抛出InterruptedException从而结束阻塞状态。
t0.interrupt();
这个是在主线程里面执行的,共3个线程使用CPU资源,随机执行其中一个,那个main线程有可能就执行不到