認識執行緒、建立執行緒寫法

许木7發表於2024-04-04

認識執行緒

1. 為什麼需要執行緒

認識執行緒、建立執行緒寫法

2. 如何理解執行緒

執行緒是程序的一部分, 一個pcb結構體描述一個執行緒, 多個pcb結構體物件(多個執行緒) 串起來等於一個程序

認識執行緒、建立執行緒寫法

認識執行緒、建立執行緒寫法

3. 為什麼說執行緒比程序建立/銷燬開銷小 ?

認識執行緒、建立執行緒寫法

4. 程序和執行緒之間的區別與聯絡

1. 程序包含執行緒! 一個程序裡面可以有一個執行緒,也可以有多個執行緒。

2. 程序在頻繁建立和銷燬中,開銷更高. 而只有第一次建立執行緒(程序), 才會申請資源, 之後建立執行緒都不會在申請資源, 因為執行緒之間資源共享

3. 程序是系統分配資源(記憶體,檔案資源....) 的基本單位。執行緒是系統排程執行的基本單位(CPU)

4. 程序之間是相互獨立的, 一個程序掛了其他程序一般都沒事. 但是, 在一個程序內部的多個執行緒之間, 一個執行緒掛了,整個程序都掛了

5. 建立執行緒的寫法

1. 建立thread子類, 重寫run()方法

檢視程式碼
 class MyThread extends Thread {
    @Override
    public void run() {
        // 這裡寫的程式碼, 就是該執行緒要完成的工作
        while (true) {
            System.out.println("hello thread");
            // 讓執行緒主動進入"堵塞狀態", 短時間停止去cpu上執行
            // 單位 1000 ms (毫秒) => 1 s (秒)
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class Test {
    public static void main(String[] args) {
        // Thread 類表示執行緒
        Thread t = new MyThread();
        t.start(); // 建立執行緒, 線上程中呼叫run()

        while (true) {
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

認識執行緒、建立執行緒寫法

2. 透過Runable介面

認識執行緒、建立執行緒寫法

檢視程式碼
 class MyRunnable implements  Runnable {
    @Override
    public void run() {
        while (true) {
            System.out.println("hello thread");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class Test {
    public static void main(String[] args) {
        Thread t = new Thread(new MyRunnable());
        t.start();

        while (true) {
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

兩種寫法的區別

認識執行緒、建立執行緒寫法

3. 匿名內部類方式

本質上和方法一是一樣的

認識執行緒、建立執行緒寫法

class test {
    public static void main(String[] args) {
        Thread t = new Thread() {
            @Override
            public void run() {
                while (true) {
                    System.out.println("hello thread");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        t.start();

        while (true) {
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

相關文章