本帖最后由 ltelink 于 2012-06-18 16:13:04 编辑

解决方案 »

  1.   

    那么请问在这个程序中,“thread01.start();”语句应该在何时执行?它的作用是什么?
      

  2.   


    该调用启动线程,调用run方法就就交给新启动的线程来做了,有可能刚启动的线程就得到了CPU时间,于是运行了run方法的部分或全部,也有可能主线程的CPU时间还没用完,主线程继续运行。当然,这里引入的时间片只是一种可能性,具体还得看操作系统或jvm的调度方式,不同的操作系统,不同的jvm实现,其调度方式也可能是不一样的
      

  3.   


    这么说吧,本来是一个人在做事情,调用一个Thread对象的start后就开始有两个人做事情,但他们做事情都需要一些共享资源(如CPU),他们就会争夺这些资源(由系统调度,由系统分配),谁拿到资源就可以做事情,但是他们之间做的事情是没有任何顺序关系的。经常遇到这样的情况,我启动一个线程后,我的资源还没用完(CPU时间),我会继续做我的事情,另一个人就要等(如果有多个CPU,它们也可能同时得到CPU资源,同时进行)从外界看来,总会呈现一个顺序,比如上面,我的资源没用完,我继续做,假如我做的速度慢(CPU比较慢),可能在当前可用资源使用完后还没做完,我就要等下一次分得资源。如果我做事快且做的事不多,我可能在另一个人开始做之前就把任务全做掉了不再回复了,看《操作系统》吧,或者搜 进程/线程调度
      

  4.   

    不一样,你不说我还真没有注意,之前运行了好几次,结果的第一行都是“Thread-0 is running!”,所以不明白为什么“main is running!”就不能是第一个结果。
    那么是否可以按照你说的(包括ticmy)理解,执行结果的第一行完全取决于执行那个瞬间CPU资源分配给哪一个进程,如果刚好分配给main,就得到main is running;若是刚巧给了run(),则是Thread-0 is running?
      

  5.   

    1楼说有道理,一个线程启动后Start后不一定立即run,这主要根据OS 要看CPU的情况还有线程的调度方法决定的,可以这样理解你发一条信息给你朋友,有两种情况:
    1.正巧你朋友拿着手机收到信息就回你了,收到他的回复后你可以继续做其他的事情
    2.你朋友由于比较忙或其他原因未看到你发的信息,你还没收到他发的信息你就接着做其他的事情了,在这时等你朋友有时间看到信息了你发的信息会回复你,这样就会出现在你做其他事情的事情的时候收到他的回复。  不知道现在的描述你可否明白