Java中創(chuàng)建線程的兩種方式詳細(xì)說(shuō)明
Java中創(chuàng)建線程的兩種方式
創(chuàng)建線程方式一
通過(guò)繼承Thread類(lèi)來(lái)創(chuàng)建并啟動(dòng)多線程
Java使用java.lang.Thread類(lèi)代表線程,所有的線程對(duì)象都必須是Thread類(lèi)或其子類(lèi)的實(shí)例。每個(gè)線程的作用是完成一定的任務(wù),實(shí)際上就是執(zhí)行一段程序流即一段順序執(zhí)行的代碼。Java使用線程執(zhí)行體來(lái)代表這段程序流。 Java中通過(guò)繼承Thread類(lèi)來(lái)創(chuàng)建并啟動(dòng)多線程的步驟如下:
- 定義Thread類(lèi)的子類(lèi),并重寫(xiě)該類(lèi)的run()方法,該run()方法的方法體就代表了線程需要完成的任務(wù),因此把run()方法稱(chēng)為線程執(zhí)行體
- 創(chuàng)建Thread子類(lèi)的實(shí)例,即創(chuàng)建了線程對(duì)象
- 調(diào)用線程對(duì)象的start()方法來(lái)啟動(dòng)該線程
自定義線程類(lèi):
/** * 自定義線程類(lèi) */ public class MyThread extends Thread { public MyThread(String name){ super(name); } @Override public void run() { for(int i = 1; i <= 20; i++){ System.out.println(getName() + " " + i); } } }
測(cè)試類(lèi):
/** * 創(chuàng)建線程方式一: * 1. 創(chuàng)建自定義類(lèi)繼承Thread類(lèi) * 2. 重寫(xiě)run方法(run方法就是新的線程要執(zhí)行的代碼) * 3. 創(chuàng)建自定義類(lèi)對(duì)象(線程對(duì)象) * 4. 調(diào)用start方法開(kāi)啟新的線程 */ public class Demo01 { public static void main(String[] args) { System.out.println("main線程開(kāi)啟"); // 創(chuàng)建線程對(duì)象 MyThread myThread = new MyThread("線程A"); // 開(kāi)啟新的線程myThread myThread.start(); // 這個(gè)循環(huán)在main線程中執(zhí)行 for (int i = 1; i <= 20; i++) { System.out.println("mian線程 " + i); } } }
創(chuàng)建線程方式二
通過(guò)實(shí)現(xiàn)Runnable類(lèi)來(lái)創(chuàng)建并啟動(dòng)多線程
采用java.lang.Runnable 也是非常常見(jiàn)的一種,我們只需要重寫(xiě)run方法即可 步驟如下:
- 定義Runnable接口的實(shí)現(xiàn)類(lèi),并重寫(xiě)該接口的run()方法,該run()方法的方法體同樣是該線程的線程執(zhí)行體
- 創(chuàng)建Runnable實(shí)現(xiàn)類(lèi)的實(shí)例,并以此實(shí)例作為T(mén)hread的target來(lái)創(chuàng)建Thread對(duì)象,該Thread對(duì)象才是真正的線程對(duì)象
- 調(diào)用線程對(duì)象的start()方法來(lái)啟動(dòng)線程
代碼如下:
public class MyRunnable implements Runnable { @Override public void run() { for (int i = 1; i <= 20; i++) { System.out.println(Thread.currentThread().getName() + " " + i); } } }
/** * 創(chuàng)建線程方式二: * 1. 定義自定義類(lèi)實(shí)現(xiàn)Runnable接口 * 2. 重寫(xiě)run方法 * 3. 創(chuàng)建自定義對(duì)象 * 4. 創(chuàng)建Threed對(duì)象的時(shí)候,作為構(gòu)造方法的參數(shù)進(jìn)行傳遞 * 5. 啟動(dòng)線程start方法 */ public class Demo02 { public static void main(String[] args) { // 創(chuàng)建線程任務(wù)對(duì)象 MyRunnable myRunnable = new MyRunnable(); // 創(chuàng)建線程對(duì)象 Thread t1 = new Thread(myRunnable, "線程A"); Thread t2 = new Thread(myRunnable, "線程B"); // 開(kāi)啟線程 t1.start(); t2.start(); } }
到此這篇關(guān)于Java中創(chuàng)建線程的兩種方式詳細(xì)說(shuō)明的文章就介紹到這了,更多相關(guān)Java中創(chuàng)建線程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java向es中寫(xiě)入數(shù)據(jù)報(bào)錯(cuò)org.elasticsearch.action.ActionReque問(wèn)題
這篇文章主要介紹了java向es中寫(xiě)入數(shù)據(jù)報(bào)錯(cuò)org.elasticsearch.action.ActionReque問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11詳解Java Bellman-Ford算法原理及實(shí)現(xiàn)
Bellman-Ford算法與Dijkstra算法類(lèi)似,都是以松弛操作作為基礎(chǔ),Bellman-Ford算法是對(duì)所有邊都進(jìn)行松弛操作,本文將詳解Bellman-Ford算法原理及實(shí)現(xiàn),感興趣的可以了解一下2022-07-07深入解析java中的靜態(tài)代理與動(dòng)態(tài)代理
本篇文章是對(duì)java中的靜態(tài)代理與動(dòng)態(tài)代理進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-10-10java并發(fā)編程專(zhuān)題(四)----淺談(JUC)Lock鎖
這篇文章主要介紹了java并發(fā)編程(JUC)Lock鎖的相關(guān)內(nèi)容,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06為什么JDK8中HashMap依然會(huì)死循環(huán)
這篇文章主要介紹了為什么JDK8中HashMap依然會(huì)死循環(huán),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Java date format時(shí)間格式化操作示例
這篇文章主要介紹了Java date format時(shí)間格式化操作,結(jié)合具體實(shí)例形式分析了java針對(duì)日期時(shí)間進(jìn)行格式化操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-03-03使用kotlin編寫(xiě)spring cloud微服務(wù)的過(guò)程
這篇文章主要介紹了使用kotlin編寫(xiě)spring cloud微服務(wù)的相關(guān)知識(shí),本文給大家提到配置文件的操作代碼,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Java實(shí)現(xiàn)中國(guó)象棋的示例代碼
中國(guó)象棋是起源于中國(guó)的一種棋,屬于二人對(duì)抗性游戲的一種,在中國(guó)有著悠久的歷史。由于用具簡(jiǎn)單,趣味性強(qiáng),成為流行極為廣泛的棋藝活動(dòng)。本文將利用Java實(shí)現(xiàn)這一經(jīng)典游戲,需要的可以參考一下2022-02-02