搜尋
首頁类库下载java类库java多執行緒實作方式

java多執行緒實作方式

Nov 02, 2016 am 10:01 AM
java

一、什麼是線程?

    執行緒:程式中單一的順序控制流程。進程內相對獨立的、可調度的執行單元,是系統獨立調度和分派CPU的基本單位。

    多執行緒:單一程式中同時執行多個執行緒完成不同的工作,稱為多執行緒。

    特性:

    1)輕量級的進程,程式運作流程中可執行的最小單元,執行緒不擁有系統資源,多個執行緒共享進程所擁有的資源。

    2)一個執行緒可以建立另一個線程,多個線程可以並發執行。

    3)多個執行緒在系統運作中搶佔資源,會出現間斷性,我們看到的是並行執行,其實在有先後順序的。

    4)一個行程至少包含一個線程,即主執行緒。

 

二、執行緒有哪些狀態?

java多執行緒實作方式

  執行緒具有:新建,就緒,運行,阻塞,終止五種狀態。

    ①新建:執行緒被創建,沒有執行任何方法,如,Thread th = new Thread()。

    ②就緒:當呼叫執行緒的start方法時,就會觸發執行緒狀態變更為就緒態,等待cpu來呼叫。處於就緒態的執行緒才會被cpu調度,單cpu不是立即執行它。

    ③運作:當cpu發起對此執行緒呼叫時,它就進入了運行態。

    ④阻塞:當執行緒因某些原因,不再擁有cpu使用權,它就會被阻塞。

        阻塞有以下幾種情況:

     1)sleep(long mills):參數為毫秒數,使執行緒在指定的時間內進入阻塞,時間一過,進入就緒態。

     2)suspend() 和 resume():suspend會讓執行緒掛起,必須執行resume進行執行緒的恢復。

     3)yield():與sleep()類似,但是不能由用戶指定暫停多長時間,只能出讓機會給同優先級的線程,且不進入阻塞。如同排隊,前面的人和後面的人交換位置,但是還處在隊伍中。

     4)wait() 和 notify():wait() 使執行緒進入阻塞狀態,有兩種形式,一種指定毫秒數,另一種無參。前者可透過notify()喚起或超過指定時間自動恢復;後者必須透過notify()喚起。

    5)同步阻塞:等待同步鎖定資源。多執行緒競爭同一個資源時,只能一個執行緒獲得鎖,其它的執行緒要等待。

    ⑤終止:執行緒執行完畢,或出現異常,執行緒結束。

     

三、如何建立執行緒?

    java執行緒的實作方式有三種:繼承Thread類別、實作Runnable接口,使用Callable和FutureTask(可以有回傳值)

1、透過整合Thread類別,覆寫run()方法

class MyThThread extends Thread

@Override

public void run() {

for (int i = 0; i

System.out.println(Thread.currentThread().getsName() + " + iName );

}

}

}

 

public class ThreadDemo {

public static void main(String[] args) {

public static void main(String ;

MyThread th1 = new MyThread();

MyThread th2 = new MyThread();

th1.start();

th2.start();

}

Thread-1 0

Thread-0 0

Thread-1 1

Thread-1 2

......

    方法,使執行緒進入就緒狀態,等待CPU分配資源。

    可以看到兩個執行緒並行執行,且隨機獲得CPU。

 

2、試過實作Runnable介面,實作run()方法

class MyThread implements Runnable {

@Override

public void run() {

@Override

public void run() {

; ) {

System.out.println(Thread.currentThread().getName() + " " + i);

}

}

}

. String[] args) {

System.out.println(Thread.currentThread().getName());

MyThread th = new MyThread();

Thread t1 = new Thread(th); = new Thread(th);

t1.start();

t2.start();

}

}

輸出:main

Thread-0 0 0%

1 0

Thread-0 2

......

透過將MyThread實例傳入Thread建構方法實例化Thread,呼叫Thread的start方法,啟動執行緒。

 

ps:繼承Thread和實作Runnable介面有什麼差別呢?

1:前者為單繼承,有局限性,但介面的方式可以實現多個。

2:後者可以實現資源共享。

多執行緒程式設計中,強烈建議使用Runnable

 

3、使用Callable和Future介面建立執行緒。

    具體是建立Callable介面的實作類,並實作clall()方法。

    並使用FutureTask類別來包裝Callable實作類別的對象,並以此FutureTask物件作為Thread物件的target來建立執行緒。

 

class MyCallable implements Callable {

@Override

public Integer call() throws Exception {

public Integer

public class ThreadDemo {

public static void main (String[] args)  {

Callable

myCallable = new MyCallable();//實例化MyCallable

FutureTask

 ft = new FutureTask

(myCallable);//通FutureTask包裝

 

Thread thread = new Thread (ft);//將FutureTask傳入Thread構造,實例化執行緒Integer result = ft.get();//取得回傳值

Integer result = ft.get();//取得回傳值

System. out.println(result);

 

}

}

1)實作Callable介面中的call()方法,這是執行緒要執行的邏輯。

2)FutureTask的get()方法會一直阻塞,直到call()方法執行完畢取到回傳值。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)