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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王薪婷 于 2013-3-28 22:58 编辑

package stopthreaddemo;

class StopThread implements Runnable
{
        boolean flag=false;
        
        public void run()
        {
                while(flag)
                {
                        System.out.println(Thread.currentThread().getName()+"--run");
                }
        }
        
        public void changeFlag()
        {
                flag=true;
        }
}

class StopThreadDemo
{
        public static void main(String[] args)
        {

                //System.out.println("Hello World!");
                StopThread s=new StopThread();
               
                Thread t=new Thread(s);
                Thread t1=new Thread(s);
                t.start();
                t1.start();
                int num=0;

                while(true)
                {
                        if(num++==60)
                        {
                                s.changeFlag();
                                break;
                        }
                        System.out.println(Thread.currentThread().getName()+"---"+num);
                }
        }
}
一开始我的标记是为false的,所以就算开启了t和t1那个语句也不会被打印但是当主线程跳出循环的时候,我的标记会被改为true呀,那样run里面的代码就会被执行呀,那应该是一直执行呀?我是这样认为的,但是我编译的结果是只打印了主线程里面的。。。。run里面的都根本执行不到

评分

参与人数 1技术分 +2 收起 理由
张熙韬 + 2

查看全部评分

4 个回复

倒序浏览
hello,美女你的想法不错!但是代码实现可不是这样的喔!你线程是启动的,但是标记是false的,所以执行完线程结束了,之后你在主线程再改标记,线程也是不会再启动了的。你看到的只是主线程的打印而已了!好好理解下线程的生存周期把。这样说你懂了么?
回复 使用道具 举报
梁耀今 发表于 2013-3-28 22:50
hello,美女你的想法不错!但是代码实现可不是这样的喔!你线程是启动的,但是标记是false的,所以执行完线 ...

恩恩,谢谢我懂了,我纠结了好久最少有半个小时~
回复 使用道具 举报
梁耀今 发表于 2013-3-28 22:50
hello,美女你的想法不错!但是代码实现可不是这样的喔!你线程是启动的,但是标记是false的,所以执行完线 ...

刚刚我百度了下线程的生存周期,我理解的是,当我启动线程的时候,那个标记是false,循环里的执行不到,就执行到run方法结束了,所以这个线程就进入消亡状态了,对不?你想告诉我的就是这个对吗?:)不纠结了,所以再谢一次:谢谢
回复 使用道具 举报
王薪婷 发表于 2013-3-28 23:08
刚刚我百度了下线程的生存周期,我理解的是,当我启动线程的时候,那个标记是false,循环里的执行不到, ...

嗯嗯,是啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马