黑马程序员技术交流社区

标题: 为什么运行结果会和我想的不一样,关于多线程? [打印本页]

作者: 王薪婷    时间: 2013-3-28 22:35
标题: 为什么运行结果会和我想的不一样,关于多线程?
本帖最后由 王薪婷 于 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里面的都根本执行不到
作者: 梁耀今    时间: 2013-3-28 22:50
hello,美女你的想法不错!但是代码实现可不是这样的喔!你线程是启动的,但是标记是false的,所以执行完线程结束了,之后你在主线程再改标记,线程也是不会再启动了的。你看到的只是主线程的打印而已了!好好理解下线程的生存周期把。这样说你懂了么?
作者: 王薪婷    时间: 2013-3-28 22:58
梁耀今 发表于 2013-3-28 22:50
hello,美女你的想法不错!但是代码实现可不是这样的喔!你线程是启动的,但是标记是false的,所以执行完线 ...

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

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

嗯嗯,是啊!




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