我知道start()
创建一个新线程并调用该线程内的run()
,从而执行线程。但问题的正确答案是什么......是start()
还是run()
?为什么?
答案 0 :(得分:5)
您应该调用myThread.start()
因为start()
对start0()
进行本机调用,实际上在新线程中创建并执行run()
方法。 run()
将执行当前主题中的代码。
run()
方法定义要执行的。 start()
在 new / separate 线程中执行run()
,而调用run()
直接在当前线程中执行run()
。
答案 1 :(得分:1)
在新线程上调用run方法的机制是extralinguistic:它不能用Java代码表示。这是start方法中的关键行:
start0();
start0是一个本机方法,其调用将:
•cause a new native thread-of-execution to be created;
•cause the run method to be invoked on that thread.
答案 2 :(得分:0)
您应该调用Thread.start()
,因为它只创建一个OS线程并将此作业分配给单独的方法堆栈。
如果你调用Thread.run
它将像纯Java代码而不是线程一样工作。它将使用主线程堆栈。
答案 3 :(得分:0)
thread.start()是正确的方法。因为在内部它实际上创建了一个单独的线程,即一个单独的调用Stack被创建并在该线程上调用thread.run()。 当您调用thread.start()方法时,JVM会在内存中为此线程创建一个单独的分区。
如果你做thread.run(),它就像你在单线程环境中执行的普通方法。就像System.out.println("xx");
请阅读您更了解的文档 Link