1。假设我在主线程里启动了100个线程,是不是每启动一个就那个线程就开始执行了呢?
2。当一个线程执行完释放资源后,是不是下个开始的线程是随机的,还是根据队列来的阿?
3。run方法是在调用start方法后开始执行的对吧,但是我调试时没看到调用run方法阿,这是怎么回事阿?

解决方案 »

  1.   


    run是线程的入口函数,就像Main()函数一样,只要线程启动,就执行run中的程序!
      

  2.   

    线程有4个状态:新状态、可执行状态、死亡状态、阻塞状态。具体到网上查。你说的“启动”指可执行状态,CPU会分时间到100个线程,每个都一点一点的执行。1、是。
    2、不按队列,只要都启动了,就并行的执行。(注意线程资源共享问题,经常会有冲突问题)
    3、run()是java.lang.Thread类方法或者Runnable接口方法,需要重写。它就是线程开始干活的入口。
       start()是让线程进入可执行状态。
      

  3.   

    1.线程的调度由系统决定,jvm中依次启动线程,相当于只是同志处理器这些线程正在等待执行,具体的顺序和调度规则由系统的相关算法决定。
    2.下个开始的线程是随机的,你可以这样想,多个人(线程)进一个门(处理器),当前前面的比后面的要快(由其启动时间和优先级),但是同在前面的几个中是谁挤进去了就是随机的了(可能也有算法,俺也不了解…)
    3.同1,start只是表示线程已能执行,但是不一定系统马上就调用了他的执行方法
    个人见解