黑马程序员技术交流社区

标题: 线程中断 小程序调试问题。 [打印本页]

作者: 欧阳亚嗣    时间: 2012-11-15 19:15
标题: 线程中断 小程序调试问题。


class StopThread implements Runnable{
         boolean flag=true;
        public synchronized void run() {
                 while(flag){
                         try {
                                wait();
                        } catch (InterruptedException e) {
                               
                                System.out.println(Thread.currentThread().getName()+">>>exception");
                                                                                                                                        
                        }        System.out.println(Thread.currentThread().getName()+">>>run");
                 }
        }
}
public class StopThreadDemo {
        public static void main(String[] args) {
                 StopThread s=new StopThread();
                 Thread t1=new Thread(s);
                 Thread t2=new Thread(s);
                 
                 t1.start();
                 t2.start();
                 int num=0;
                while(true){
                        if(++num==60){
                                s.flag=false;
                                t1.interrupt();
                                t2.interrupt();
                                break;
                        }
                        System.out.println(Thread.currentThread().getName()+"..."+num);
                       
                }
                System.out.println(Thread.currentThread().getName()+".....over");
        }
}

在两个位置的更改标记,
t1.interrupt (); t2.interrupt ();执行后。 有线三个线程在runnable状态。
t1和t2之后的操作是catch异常之后 打印。main是跳出循环并打印over。
按理说应该是都得到执行 ,执行起来却有不和谐的情况,有时候,t1和t2中有一个没有输出。


作者: 欧阳亚嗣    时间: 2012-11-15 19:22
自己感觉会不会是异常在线程切换的时候丢失了。
作者: 黑马吕世成    时间: 2012-11-15 21:35
欧阳亚嗣 发表于 2012-11-15 19:15:34


class StopThread implements Runnable{
         boolean flag=true;
        public synchronized

你重写run方法怎么是synchronized的!?这样也行?
作者: 王永荣    时间: 2012-11-15 21:47
不会啊。我运行了n次。。都很和谐{:soso_e101:}
main.....over
Thread-0>>>exception
Thread-0>>>run
Thread-1>>>exception
Thread-1>>>run

作者: 欧阳亚嗣    时间: 2012-11-16 23:15
王永荣 发表于 2012-11-15 21:47
不会啊。我运行了n次。。都很和谐
main.....over
Thread-0>>>exception

我大概十次会有一次不和谐。
作者: 欧阳亚嗣    时间: 2012-11-16 23:16
黑马吕世成 发表于 2012-11-15 21:35
你重写run方法怎么是synchronized的!?这样也行?

这样可以啊。 至少没有编译错误。没有运行异常, 如果有逻辑错误,还请好心的指出。

作者: 欧阳亚嗣    时间: 2012-11-19 20:33
终于知道为什么了 。


只需要在子线程启动后让mian。sleep一会就好

因为 主线程结束后,启动了但是还没有来得及获得执行权的线程就死了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2