A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 欧阳亚嗣 中级黑马   /  2012-11-15 19:15  /  1608 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



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中有一个没有输出。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
自己感觉会不会是异常在线程切换的时候丢失了。
回复 使用道具 举报
黑马吕世成 来自手机 中级黑马 2012-11-15 21:35:39
藤椅
欧阳亚嗣 发表于 2012-11-15 19:15:34


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

你重写run方法怎么是synchronized的!?这样也行?来自: Android客户端
回复 使用道具 举报
不会啊。我运行了n次。。都很和谐{:soso_e101:}
main.....over
Thread-0>>>exception
Thread-0>>>run
Thread-1>>>exception
Thread-1>>>run
回复 使用道具 举报
王永荣 发表于 2012-11-15 21:47
不会啊。我运行了n次。。都很和谐
main.....over
Thread-0>>>exception

我大概十次会有一次不和谐。
回复 使用道具 举报
黑马吕世成 发表于 2012-11-15 21:35
你重写run方法怎么是synchronized的!?这样也行?

这样可以啊。 至少没有编译错误。没有运行异常, 如果有逻辑错误,还请好心的指出。
回复 使用道具 举报
终于知道为什么了 。


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

因为 主线程结束后,启动了但是还没有来得及获得执行权的线程就死了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马