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

发个多线程问题,求解
public class Test4  implements Runnable{

@Override
public void run() {

for(int i=0;i<10;i++){
System.out.println("A");
if(i==5){
System.out.println(500);
Thread.currentThread().interrupt();
}
}

}


public static void main(String[] args) {

Thread t=new Thread(new Test4());

t.start();

for(int i=0;i<1000;i++){

System.out.println("B");

}
}

}



我想当i==5的时候停止线程t可是运行结果是这样的

B
B
B
B
B
B
B
B
B
B
A
A
A
A
A
A
stop
A
A
A
A

在stop之后t仍然线程存在,就解释怎么才能强制结束线程t

------解决方案--------------------
http://www.cnblogs.com/linjiqin/archive/2011/04/11/2012695.html   

lz可以参考这篇帖子!
------解决方案--------------------

public class Test4 implements Runnable {
Thread t = null;

public void run() {

for (int i = 0; i < 10; i++) {
System.out.println("A");
if (i == 5) {
System.out.println(500);
t.interrupt();
}
}

}

public void info() {
t = new Thread(new Test4());

t.start();

for (int i = 0; i < 1000; i++) {

System.out.println("B");

}
}

public static void main(String[] args) {
new Test4().info();
}

}

------解决方案--------------------
interrupt是一种协作机制,http://www.ticmy.com/?p=31

就好比是设置了一个标志位,你要自己处理的,比如

public void run() {
         
        for(int i=0;i<10;i++){
            System.out.println("A");
            if(i==5){
                System.out.println(500);
                //Thread.currentThread().interrupt();
            }
            if(Thread.interrupted()) {
                  throw new InterruptedException("线程被中断");
            }
        }
         
    }