Java:Thread.Start() / run()

线程的启动顺序

  • testThread 线程实例创建之后,调用 start(),表明这个线程处于就绪状态,等待得到 CPU 的时间片之后才会执行
  • 因为 main 方法也是一个线程,所以 testThread 会等待 main() 执行完毕
  • main() 执行完毕后,testThread 线程得到 CPU 的时间片,开始执行
  • 当 testThread 启动时,它的状态 threadStatus 被设置为 0 ,然后加入线程组 group
  • 最后调用 start0(),而 start0() 是私有的 native 方法(Native Method 是一个 java 调用非 java 代码的接口)
  • 调用完毕后,testThread 线程就处于就绪状态,获得 CPU 时间之后就会调用 thread 的 run()

run()

  • thread.run() 会等待 thread 里面的 run() 执行完毕后才会执行;直接调用 run() 这样的用法就和调用普通方法一样,其实并没有创建新的线程
  • thread.start() 就会创建新的线程,然后处于就绪状态;让主线程先执行完毕,再轮到自己

run() 的好处

  • 实现了 Runnable 接口的方法 run() ,之后就可以让多个线程调用 run() 共享同一个资源
  • 实现 Runnable 接口相对于继承 Thread 类来说,可以避免 Java 单继承的局限性
  • start()被多次调用也还是一个线程
< - 僕らは知らない - >