這篇文章將為大家詳細(xì)講解有關(guān)Java中Thread.start()和Thread.run()之間的區(qū)別有哪些,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)自2013年創(chuàng)立以來(lái),是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元渭源做網(wǎng)站,已為上家服務(wù),為渭源各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):18980820575
Java中的start()方法
線(xiàn)程類(lèi)的start()方法可以用來(lái)啟動(dòng)線(xiàn)程;該方法會(huì)在內(nèi)部調(diào)用Runnable接口的run()方法,以在單獨(dú)的線(xiàn)程中執(zhí)行run()方法中指定的代碼。
start()方法啟動(dòng)線(xiàn)程執(zhí)行以下任務(wù):
● 它統(tǒng)計(jì)了一個(gè)新線(xiàn)程
● 線(xiàn)程從New State移動(dòng)到Runnable狀態(tài)。
● 當(dāng)線(xiàn)程有機(jī)會(huì)執(zhí)行時(shí),它的目標(biāo)run()方法將運(yùn)行。
Java中的run()方法
線(xiàn)程類(lèi)的run()方法是Runnable接口的一個(gè)抽象方法,由java虛擬機(jī)直接調(diào)用的,不會(huì)創(chuàng)建的新線(xiàn)程。
start()方法和run()方法的區(qū)別
1、方法的定義
start()方法在java.lang.Thread類(lèi)中定義;而,run()方法在java.lang.Runnable接口中定義,必須在實(shí)現(xiàn)類(lèi)中重寫(xiě)。
2、新線(xiàn)程創(chuàng)建
當(dāng)程序調(diào)用start()方法時(shí),會(huì)創(chuàng)建一個(gè)新線(xiàn)程,然后執(zhí)行run()方法。但是如果我們直接調(diào)用run()方法,則不會(huì)創(chuàng)建新的線(xiàn)程,run()方法將作為當(dāng)前調(diào)用線(xiàn)程本身的常規(guī)方法調(diào)用執(zhí)行,并且不會(huì)發(fā)生多線(xiàn)程。
示例:
class MyThread extends Thread { public void run() { System.out.println("\n"); System.out.println("當(dāng)前線(xiàn)程的名稱(chēng): " + Thread.currentThread().getName()); System.out.println("run()方法調(diào)用"); } } class demo { public static void main(String[] args) { MyThread t = new MyThread(); t.start(); } }
輸出:
正如我們?cè)谏厦娴睦又兴吹降?,?dāng)我們調(diào)用線(xiàn)程類(lèi)實(shí)例的start()方法時(shí),會(huì)創(chuàng)建一個(gè)新的線(xiàn)程,默認(rèn)名稱(chēng)為T(mén)hread-0,然后調(diào)用run()方法,并在其中執(zhí)行所有內(nèi)容。新創(chuàng)建的線(xiàn)程。
現(xiàn)在,讓我們嘗試直接調(diào)用run()方法而不是start()方法:
class MyThread extends Thread { public void run() { System.out.println("\n"); System.out.println("當(dāng)前線(xiàn)程的名稱(chēng): " + Thread.currentThread().getName()); System.out.println("run()方法調(diào)用"); } } class GeeksforGeeks { public static void main(String[] args) { MyThread t = new MyThread(); t.run(); } }
輸出:
正如我們?cè)谏厦娴睦又兴吹降?,?dāng)我們調(diào)用MyThread類(lèi)的run()方法時(shí),沒(méi)有創(chuàng)建新線(xiàn)程,并且在當(dāng)前線(xiàn)程即主線(xiàn)程上執(zhí)行run()方法。因此,沒(méi)有發(fā)生多線(xiàn)程。run()方法是作為正常函數(shù)被調(diào)用。
3、多次調(diào)用
start()方法不能多次調(diào)用,否則拋出java.lang.IllegalStateException;而,run()方法可以進(jìn)行多次調(diào)用,因?yàn)樗皇且环N正常的方法調(diào)用。
關(guān)于Java中Thread.start()和Thread.run()之間的區(qū)別有哪些就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。