日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java多线程的实现方式_Java 多线程(一)——多线程的实现方式

發布時間:2024/1/23 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java多线程的实现方式_Java 多线程(一)——多线程的实现方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

Java 異常的處理方式與自定義異常 我們已經講完了,從今天開始我們來學習多線程。

二、與多線程相關的概念

2.1、并發與并行并發:指兩個或多個事件在同一個時間段內發生,具體如下圖所示:

并行:指兩個或多個事件在同一時刻發生(同時發生),具體如下圖所示:

2.2、進程與線程進程:是指一個內存中運行的應用程序,每個進程都有一個獨立的內存空間,一個應用程序可以同時運行多個進程;進程也是程序的一次執行過程,是系統運行程序的基本單位;系統運行一個程序即是一個進程從創建、運行到消亡的過程。電腦中的任務管理器就有進程這個概念,如下所示:

線程:線程是進程中的一個執行單元,負責當前進程中程序的執行,一個進程中至少有一個線程。一個進程中是可以有多個線程的,這個應用程序也可以稱之為多線程程序。

簡而言之:一個程序運行后至少有一個進程,一個進程中可以包含多個線程

2.3、線程調度分時調度

所有線程輪流使用 CPU 的使用權,平均分配每個線程占用 CPU 的時間。

搶占式調度

優先讓優先級高的線程使用 CPU,如果線程的優先級相同,那么會隨機選擇一個(線程隨機性),Java 使用的是搶占式調度。

三、多線程的創建方式

3.1、繼承 Thread 類創建多線程

Java 使用 java.lang.Thread 類代表線程,所有的線程對象都必須是 Thread 類或其子類的實例。每個線程的作用是完成一定的任務,實際上就是執行一段程序流即一段順序執行的代碼。Java 使用線程執行體來代表這段程序流。Java 中通過繼承 Thread 類來創建并啟動多線程的步驟如下:定義 Thread 類的子類,并重寫該類的 run() 方法,該 run() 方法的方法體就代表了線程需要完成的任務,因此把 run() 方法稱為線程執行體。

創建 Thread 子類的實例,即創建了線程對象。

調用線程對象的 start() 方法來啟動該線程。代碼演示如下所示public class MyThread extends Thread {

// 定義指定線程名稱的構造方法

public MyThread(String name) {

// 調用父類的String參數的構造方法,指定線程的名稱

super(name);

}

/**

* 重寫run方法,完成該線程執行的邏輯

*/

@Override

public void run() {

for (int i = 0; i < 10; i++) {

System.out.println(getName() + ":正在執行!" + i);

}

}

public static void main(String[] args) {

//創建自定義線程對象

MyThread mt = new MyThread("新的線程!");

//開啟新線程

mt.start();

//在主方法中執行for循環

for (int i = 0; i < 10; i++) {

System.out.println("main線程!" + i);

}

}

}

執行結果如下所示:

從執行結果我們可以看出,執行過程是隨機的,兩個線程一起搶奪 CPU 的執行權,誰搶到誰執行。

3.1.1、多線程原理

程序啟動運行 main 時候,Java 虛擬機啟動一個進程,主線程 main 在 main() 方法被調用時候被創建。隨著調用 mt 對象的 start 方法,另外一個新的線程也啟動了,這樣,整個應用就在多線程下運行了。

當調用 mt.start() 方法時,會開辟新的棧空間,在棧空間執行線程對象的 run() 方法,每個線程都有自己獨立的棧空間。

3.1.2、Thread 類常用方法構造方法

public Thread():分配一個新的線程對象。

public Thread(String name):分配一個指定名字的新的線程對象。

public Thread(Runnable target) :分配一個帶有指定目標的新的線程對象。

public Thread(Runnable target,String name) :分配一個帶有指定目標新的線程對象并指定名字。

常用方法

public String getName() :獲取當前線程名稱。

public void start() :啟動線程,Java虛擬機調用此線程的run方法。

public void run() :此線程要執行的任務在此處定義代碼。

public static void sleep(long millis) :使當前正在執行的線程以指定的毫秒數暫停。

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

3.2、實現 Runnable 接口創建多線程

Java 中通過實現 Runnable 接口來創建并啟動多線程的步驟如下:創建一個 Runnable 接口實現類;

在實現類中重寫 Runnable 接口的 run() 方法,設置線程任務;

創建一個 Runnable 接口的實現類對象;

創建 Thread 類對象,構造方法傳遞 Runnable 接口的實現類對象;

調用 Thread 類中的 start() 方法,開啟新的線程,執行 run() 方法。代碼演示如下所示public class RunnableDemo implements Runnable {

@Override

public void run() {

for (int i = 0; i < 20; i++) {

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

}

}

public static void main(String[] args) {

RunnableDemo r = new RunnableDemo();

new Thread(r).start();

for (int i = 0; i < 20; i++) {

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

}

}

}

四、小結

多線程的實現方式我們已經講完了,下一節我們來講線程安全。

五、源碼

文章中用到的所有源碼已上傳至 github,有需要的可以去下載。

總結

以上是生活随笔為你收集整理的java多线程的实现方式_Java 多线程(一)——多线程的实现方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。