在Java編程中,我們總會(huì)用到線程相關(guān)的概念。而在線程的使用中,start和run兩個(gè)方法都非常重要,但是它們之間有什么區(qū)別呢?
public class ThreadTest extends Thread { @Override public void run() { System.out.println("ThreadTest Running!"); } public static void main(String[] args) { ThreadTest thread = new ThreadTest(); thread.run(); // thread.start(); } }
在上面的代碼中,ThreadTest類繼承了Thread類,并重寫了其run方法。在main方法中,我們創(chuàng)建了一個(gè)ThreadTest對(duì)象,并調(diào)用了其run方法。我們可以看到,輸出的內(nèi)容為"ThreadTest Running!"。
但是,如果我們將上面的代碼中thread.run()語(yǔ)句改為thread.start(),那么程序輸出的內(nèi)容將會(huì)發(fā)生變化。
public class ThreadTest extends Thread { @Override public void run() { System.out.println("ThreadTest Running!"); } public static void main(String[] args) { ThreadTest thread = new ThreadTest(); // thread.run(); thread.start(); } }
在上面的代碼中,我們將thread.run()改為了thread.start()。那么程序輸出的內(nèi)容將會(huì)是"ThreadTest Running!"加上一些其他內(nèi)容。這是因?yàn)閟tart方法會(huì)啟動(dòng)一個(gè)新的線程,而新的線程會(huì)在其自己的執(zhí)行上下文中調(diào)用run方法。因此,我們會(huì)同時(shí)看到"ThreadTest Running!"和其他的輸出內(nèi)容。
綜上可以看出,run方法只是普通的方法調(diào)用,而start方法才是真正啟動(dòng)線程的方法。