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 多线程(一)——多线程的实现方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java jconsole_java中j
- 下一篇: java拳皇地下城_拳皇(Java简单的