多線程,java多線程

來源:互聯網
上載者:User

多線程,java多線程

程式是對資料描述與操作的代碼的集合,如Office中的Word,暴風影音等應用程式。

進程是程式的一次動態執行過程,它對應了從代碼載入、執行至執行完畢的一個完整過程。

進程的特點:

①:進程是系統運行程式的基本程式。

②:每一個進程都有自己獨立的一塊記憶體空間、一組資源資源。

③:每一個進程的內部資料和狀態都是完全獨立的。

進程包括系統進程(有作業系統內部建立的進程)和使用者進程(由使用者程式建立的進程)。

每個進程中,至少建立一個線程,來作為這個程式啟動並執行進入點。

在一個進程中同時運行了多個線程,用來完成不同的工作,則稱為“多線程”。

多線程的好處:

①:充分利用CPU的資源:執行單線程是,若程式發生阻塞,CPU可能處於空閑,造成資源浪費;而使用多線程可以在發生阻塞時運行其他線程,大大提高利用率

②:簡化編程模型:一個即長又複雜的進程可以考慮分為多個線程,成為幾個獨立的運行部分。

③:帶來良好的使用者體驗:多個線程交替執行,減少或避免因程式阻塞或意外情況造成的響應過慢現象,降低了使用者等待的機率。

Thread類的常用方法

Thread():                                                    分配新的Thread對象

Thread(Runnable target):                             分配新的Thread對象,target為run()方法被調用的對象

Thread(Runnable target,String name):          分配新的Thread對象,target為run()方法被調用的對象,name為新線程的名稱

void run():                                                  執行任務操作的方法

void start():                                               使該線程開始執行,Java虛擬機器調用該線程的run()方法

void sleep(long millis)                                  在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)

String getName()                                     返回該線程的名稱。

int getPriority()                                        返回線程的優先順序。

void setPriority(int newPriority)                    更改線程的優先順序。

 

static Thread currentThread():                       返回當前正在執行的線程對象的引用

boolean isAlive():                                          測試線程是否處於活動狀態

void join()                                                 等待該線程終止。

void interrupt()                                        中斷線程。

void yield()                                              暫停當前正在執行的線程對象,並執行其他線程。

boolean isDaemon()                                  測試該線程是否為守護線程。

void setDaemon(boolean on)                      將該線程標記為守護線程或使用者線程。

void setName(String name)                         改變線程名稱,使之與參數 name 相同。

 

從Object類繼承來的方法  void notify()        void wait()

 

主線程

在Java程式啟動時,一個線程立刻運行,該程式通常稱為程式的主線程。

①:它是產生其他子線程的線程。

②:通常它必須最後完成執行,因為它執行各種關閉動作。

使用一個線程的過程,分為四個步驟:

①:定義一個線程,同時指明這個線程所要執行的代碼,即期望完成的功能。

②:建立線程對象。

③:啟動線程

④:終止線程。

建立線程類的兩種方法:一個是繼承Thread類,另一個是實現Runnable介面。

 

繼承Thread類:

 

1、擴充java.lang.Thread類。

此類中有個run()方法,應該注意其用法:

public void run()

如果該線程是使用獨立的Runnable運行物件建構的,則調用該Runnable對象的run方法;否則,該方法不執行任何操作並返回。

 

①:編寫簡單,可直接操作線程。

②:適用於單繼承。

注意:已啟動的線程對象不能再次調用start()方法,否則會拋出IllegalThreadStateException異常(線程沒有處於請求操作所需要的適當狀態時拋出的異常)。

線程執行個體調用start()方法和直接調用run()方法有什麼區別?

start()是啟動程式,run()是調用執行個體方法。

 

實現Runnable介面

 

2、實現java.lang.Runnable介面。

 

void run()

 

使用實現介面Runnable的對象建立一個線程時,啟動該線程將導致在獨立執行的線程中調用對象的run方法。

 

方法run的常規協定是,它可能執行任何所需的操作。

 

 

①:避免單繼承局限性

②:便於共用資源

一個類可以通過實現Runnable介面並實現其run()完成線程的所有活動,已實現的run()方法稱為該線程對象的線程體。

例題1:建立兩個線程,每個線程均輸出20次訊息數字、“你好”、線程名。

 

/** * 繼承Thread的類 * @author 顥6 * */public class MyThread extends Thread{        public void run(){        for (int i = 1; i <=20; i++) {            System.out.println("你好,來自線程"+Thread.currentThread().getName()+":"+i);        }    }}

 

/** * 測試Thread類實現的多線程程式 * @author 顥6 * */public class TestStart {    public static void main(String[] args) {        MyThread mt1=new MyThread();        mt1.start();                Thread t1=new Thread(new MyThread());        t1.start();            }}

例題2:使用實現Runnable介面的方式建立線程類,修改測試類別

 

/** * 實現Runnable介面的類 * @author Administrator * */public class MyThread implements Runnable{    public void run() {        for (int i = 1; i <=20; i++) {            System.out.println(i+".你好,來自線程"+Thread.currentThread().getName());        }    }}
/** * 測試Runnable類的實現多線程程式 * @author 顥6 * */public class Test {    public static void main(String[] args) {                Thread myS=new Thread(new MyThread());        myS.start();    }}

線程的狀態

任何線程一般都具有五種狀態,即建立、就緒、運行、阻塞、死亡狀態。

 

建立狀態:在程式中用構造方法建立了一個線程對象後,新的線程對象就處於建立狀態。

就緒狀態:線程建立之後,就可以通過調用start()方法啟動線程,即進入就緒狀態。

運行狀態:當就緒狀態的線程獲得CPU資源是,即可進入運行狀態,執行run()方法。

阻塞狀態:一個正在啟動並執行線程因某種原因不能繼續運行時,進入阻塞狀態。

①:由於線程優先順序比較低,因此它不能獲得CPU資源。

②:使用sleep()方法使線程休眠。

③:通過調用wait()方法,是線程等待。

④:通過調用yield(),線程顯式出讓CPU控制權。

⑤:線程由於等待一個檔案,I/O事件被阻塞。

死亡狀態:一個線程的run()方法運行完畢,則進入死亡狀態。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.