黑马程序员技术交流社区

标题: join方法问题 [打印本页]

作者: 郑世光    时间: 2012-8-27 18:31
标题: join方法问题
当程序执行到t1.join(); 时,有没有可能是:此时正在执行的进程是t2,然后t1.join(); 让t2放弃了cpu。当t1执行完了,t2才会执行。


class Demo implements Runnable
{
        public void run()
        {
                for(int x=0; x<70; x++)
                {
                        System.out.println(Thread.currentThread().toString()+"....."+x);
                }
        }
}


class  JoinDemo
{
        public static void main(String[] args) throws Exception
        {
                Demo d = new Demo();
                Thread t1 = new Thread(d);
                Thread t2 = new Thread(d);
                t1.start();
                t2.start();
                t1.join();     
                for(int x=0; x<80; x++)
                {
                        System.out.println("main....."+x);
                }
                System.out.println("main over");
        }
}
作者: 周兴华    时间: 2012-8-27 18:49
楼主的代码中t1.join();是写在主线程中的,所以现象应该会是当主线程执行到t1.join();时,主线程放弃CPU执行权,此时应该CPU对t1和t2交替执行。
等t1执行完后,主线程才醒过来,此时如果t2没执行完,CPU就对主线程和t2交替执行。
作者: 郑世光    时间: 2012-8-27 18:58
是不是执行t1.join();语句的是主进程,所以此时放弃cpu的一定是当前执行的主进程。
作者: 周兴华    时间: 2012-8-27 19:00
郑世光 发表于 2012-8-27 18:58
是不是执行t1.join();语句的是主进程,所以此时放弃cpu的一定是当前执行的主进程。 ...

是的,在毕老师12天的视频中有讲到
作者: 周兴华    时间: 2012-8-27 19:01
楼主多运行几次程序,应该能观察出结果




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