Java中創(chuàng)建線程的兩種方式詳細(xì)說明
Java中創(chuàng)建線程的兩種方式
創(chuàng)建線程方式一
通過繼承Thread類來創(chuàng)建并啟動(dòng)多線程
Java使用java.lang.Thread類代表線程,所有的線程對(duì)象都必須是Thread類或其子類的實(shí)例。每個(gè)線程的作用是完成一定的任務(wù),實(shí)際上就是執(zhí)行一段程序流即一段順序執(zhí)行的代碼。Java使用線程執(zhí)行體來代表這段程序流。 Java中通過繼承Thread類來創(chuàng)建并啟動(dòng)多線程的步驟如下:
- 定義Thread類的子類,并重寫該類的run()方法,該run()方法的方法體就代表了線程需要完成的任務(wù),因此把run()方法稱為線程執(zhí)行體
- 創(chuàng)建Thread子類的實(shí)例,即創(chuàng)建了線程對(duì)象
- 調(diào)用線程對(duì)象的start()方法來啟動(dòng)該線程
自定義線程類:
/** * 自定義線程類 */ 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); } } }
測試類:
/** * 創(chuàng)建線程方式一: * 1. 創(chuàng)建自定義類繼承Thread類 * 2. 重寫run方法(run方法就是新的線程要執(zhí)行的代碼) * 3. 創(chuàng)建自定義類對(duì)象(線程對(duì)象) * 4. 調(diào)用start方法開啟新的線程 */ public class Demo01 { public static void main(String[] args) { System.out.println("main線程開啟"); // 創(chuàng)建線程對(duì)象 MyThread myThread = new MyThread("線程A"); // 開啟新的線程myThread myThread.start(); // 這個(gè)循環(huán)在main線程中執(zhí)行 for (int i = 1; i <= 20; i++) { System.out.println("mian線程 " + i); } } }
創(chuàng)建線程方式二
通過實(shí)現(xiàn)Runnable類來創(chuàng)建并啟動(dòng)多線程
采用java.lang.Runnable 也是非常常見的一種,我們只需要重寫run方法即可 步驟如下:
- 定義Runnable接口的實(shí)現(xiàn)類,并重寫該接口的run()方法,該run()方法的方法體同樣是該線程的線程執(zhí)行體
- 創(chuàng)建Runnable實(shí)現(xiàn)類的實(shí)例,并以此實(shí)例作為Thread的target來創(chuàng)建Thread對(duì)象,該Thread對(duì)象才是真正的線程對(duì)象
- 調(diào)用線程對(duì)象的start()方法來啟動(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. 定義自定義類實(shí)現(xiàn)Runnable接口 * 2. 重寫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"); // 開啟線程 t1.start(); t2.start(); } }
到此這篇關(guān)于Java中創(chuàng)建線程的兩種方式詳細(xì)說明的文章就介紹到這了,更多相關(guān)Java中創(chuàng)建線程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java向es中寫入數(shù)據(jù)報(bào)錯(cuò)org.elasticsearch.action.ActionReque問題
這篇文章主要介紹了java向es中寫入數(shù)據(jù)報(bào)錯(cuò)org.elasticsearch.action.ActionReque問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11詳解Java Bellman-Ford算法原理及實(shí)現(xiàn)
Bellman-Ford算法與Dijkstra算法類似,都是以松弛操作作為基礎(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ì)的分析介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-10-10java并發(fā)編程專題(四)----淺談(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),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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編寫spring cloud微服務(wù)的過程
這篇文章主要介紹了使用kotlin編寫spring cloud微服務(wù)的相關(guān)知識(shí),本文給大家提到配置文件的操作代碼,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09