1 A.java
?* 學習多線程之前,我們先要了解幾個關(guān)于多線程有關(guān)的概念。
?? ?
?? ?A:進程:進程指正在運行的程序。確切的來說,當一個程序進入內(nèi)存運行,即變成一個進程,進程是處于運行過程中的程序,并且具有一定獨立功能。
?? ?
?? ?B:線程:線程是進程中的一個執(zhí)行單元,負責當前進程中程序的執(zhí)行,一個進程中至少有一個線程。一個進程中是可以有多個線程的,這個應(yīng)用程序也可以稱之為多線程程序。
?? ?
?? ?C:簡而言之:一個程序運行后至少有一個進程,一個進程中可以包含多個線程
?? ?
?? ?什么是多線程呢?即就是一個程序中有多個線程在同時執(zhí)行。(同一時間做多件事情,安全性低,效率高)* 多線程的實現(xiàn)方式:
?* ?? ??? ?方式1:
?* ?? ??? ??? ?一種方法是將類聲明為 Thread 的子類。
?* ?? ??? ??? ?該子類應(yīng)重寫 Thread 類的 run 方法。
?* ?? ??? ??? ?接下來可以分配/創(chuàng)建并啟動該子類的實例
?*?
?* Thread
?* ?? ??? ?String getName() ? ? ?返回該線程的名稱。?
?*?
?* ?? ??? ?void ? setName(String name) 改變線程名稱,使之與參數(shù) name 相同。
?*?
?* 現(xiàn)在使用了多線程,所以輸出是切換性的,不會按順序執(zhí)行,先是張三執(zhí)行完,再次依次往后執(zhí)行...
?*?
?* CPU執(zhí)行程序的隨機性,多個程序進行高速切換,所以并不不會感覺有卡頓現(xiàn)象!
?? ?
?? ?
?? ?右鍵選擇,Source,選擇Override選擇需要重寫的方法定義多線程類:
public class A_MyThread extends Thread { @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println(getName() + ":" + i); } } }
定義主類:
public class A_ThreadMain { public static void main(String[] args) { //創(chuàng)建線程實例 A_MyThread mt = new A_MyThread(); //修改線程名字 mt.setName("張三"); //不改名字就是默認是從Thread-0,Thread-1...開始 //啟動線程 mt.start(); //創(chuàng)建線程實例 A_MyThread mt2 = new A_MyThread(); mt2.setName("老王"); //啟動線程 mt2.start(); } }
2 B.java
?* 主方法中的代碼(方法)執(zhí)行是多線程嗎?
?* ?? ??? ?圖解:
?
?
?* ?? ??? ?主方法的(方法)執(zhí)行是單線程!3 C.java
?* 多線程的實現(xiàn)方式:
?* ?? ??? ?方式2:
?* ?? ?創(chuàng)建線程的另一種方法是聲明實現(xiàn) Runnable 接口的類。該類然后實現(xiàn) run 方法。然后創(chuàng)建Runnable的子類對象,傳入到某個線程的構(gòu)造方法中,開啟線程。
?? ?
?? ?為何要實現(xiàn)Runnable接口,Runable是啥玩意呢?繼續(xù)API搜索。
?? ?
?? ?查看Runnable接口說明文檔:Runnable接口用來指定每個線程要執(zhí)行的任務(wù)。包含了一個 run 的無參數(shù)抽象方法,需要由接口實現(xiàn)類重寫該方法。?* ?? ?1、定義類實現(xiàn)Runnable接口。
?? ?2、覆蓋接口中的run方法。。
?? ?3、創(chuàng)建Thread類的對象
?? ?4、將Runnable接口的子類對象作為參數(shù)傳遞給Thread類的構(gòu)造函數(shù)。
?? ?5、調(diào)用Thread類的start方法開啟線程。?? ?由于java是單繼承,所以再搞一個接口出來實現(xiàn)多線程是非常有意義的!
定義多線程類文章來源:http://www.zghlxwxcb.cn/news/detail-475009.html
public class B_MyThread implements Runnable { int num; public B_MyThread() { } @Override public void run() { for (int i = 0; i < 100; i++) { Thread t = Thread.currentThread();//currentThread() 返回對當前正在執(zhí)行的線程對象的引用。 System.out.println(t.getName() + ":" + i); /* //鏈式編程 System.out.println(Thread.currentThread().getName() + ":" + i + num);*/ } } }
主類:文章來源地址http://www.zghlxwxcb.cn/news/detail-475009.html
public class B_ThreadMain { public static void main(String[] args) { // TODO Auto-generated method stub //創(chuàng)建線程實例 B_MyThread mt = new B_MyThread(); Thread t = new Thread(mt); t.setName("xu"); t.start(); //創(chuàng)建線程實例 B_MyThread mt2 = new B_MyThread(); Thread t2 = new Thread(mt2); t2.setName("ui"); t2.start(); } }
到了這里,關(guān)于JavaSE_day43(多線程單線程區(qū)別,圖解main方法若是單多線程該如何執(zhí)行,如何使用多線程2種方式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!