【问题标题】:what is thread created myself and main thread running sequence我自己创建的线程和主线程运行顺序是什么
【发布时间】:2016-07-24 02:59:44
【问题描述】:
public class ThreadTest extends Thread {
  public static void main(String[] args) {
    new ThreadTest().start();
    for (int i = 0; i < 10; i++) {
      System.out.format("%s %d\n", Thread.currentThread(), i);
    } 
  }
   public void run() {
     for (int i = 0; i < 10; i++) {
       System.out.format("%s %d\n", Thread.currentThread(), i);
     } 
   }
}

输出是:

Thread[Thread-0,5,main] 0
Thread[main,5,main] 0
Thread[main,5,main] 1
Thread[main,5,main] 2
Thread[main,5,main] 3
Thread[main,5,main] 4
Thread[main,5,main] 5
Thread[main,5,main] 6
Thread[main,5,main] 7
Thread[main,5,main] 8
Thread[main,5,main] 9
Thread[Thread-0,5,main] 1
Thread[Thread-0,5,main] 2
Thread[Thread-0,5,main] 3
Thread[Thread-0,5,main] 4
Thread[Thread-0,5,main] 5
Thread[Thread-0,5,main] 6
Thread[Thread-0,5,main] 7
Thread[Thread-0,5,main] 8
Thread[Thread-0,5,main] 9

我对线程运行的顺序感到困惑。当 new ThreadTest.start 时,它将首先运行 run() 方法。但是为什么它输出0并继续运行主线程,你能为我解释一下输出吗?

提前谢谢你。

【问题讨论】:

  • 线程顺序由线程调度器决定。不是程序员。
  • 两者都将并行运行尝试在两个循环中添加Thread.sleep(1000); 并查看结果。

标签: java multithreading main


【解决方案1】:

System.out.println 是一种同步方法,当线程获取锁时,它优先再次获取锁。在这种情况下,main 设法获得锁并一直获得它,直到主循环完成。如果您再次运行此程序,您可能会以不同的顺序获得输出。

【讨论】:

  • 哦,我明白了。谢谢彼得
猜你喜欢
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
  • 2011-01-15
相关资源
最近更新 更多