Java中,啟動線程的兩種方式包括start()和run()方法。雖然它們都可以啟動線程,但是它們之間有一些重要的區別。
首先,start()方法是一個非常重要的方法,因為它會使線程開始執行。當調用start()方法時,JVM會為該線程分配一個新的堆棧,并在新的堆棧上運行該線程的run()方法。
public void start() public void run()
接下來,讓我們來比較一下這兩個方法。當我們調用start()方法時,線程進入了就緒狀態,并等待JVM調用它的run()方法。而如果我們調用run()方法,那么線程直接在當前堆棧上運行,而不是在新的堆棧上運行。因此,如果我們熟悉線程的工作原理,那么我們可以推斷出,調用run()方法不會創建新的線程。
此外,對于實現Runnable接口的類,其start()方法不會執行run()方法,而是會調用它自己的run()方法。例如:
public class MyRunnable implements Runnable { public void run() { //實現線程要做的工作 } public static void main(String[] args) { Thread t = new Thread(new MyRunnable()); t.start(); //調用的是Thread自己的start()方法 } }
最后,需要注意的是,如果我們在一個線程中調用自己的start()方法,那么它會發生什么呢?其實,這是非常危險的行為,因為它會導致線程死鎖或者永遠等待。這是因為在調用start()方法時,JVM會為該線程分配一個新的堆棧,而如果我們在當前堆棧上運行run()方法,那么線程將永遠等待自己的run()方法完成。
綜上所述,start()方法是啟動線程的首選方式,因為它會創建一個新的線程,并在新的線程上運行run()方法。而調用run()方法不會創建新的線程,因此它在很多情況下都是不適用的。
下一篇vue方法寫哪里