天天看點

14-多線程1

1.實作多線程

1.1簡單了解多線程【了解】

是指從軟體或者硬體上實作多個線程并發執行的技術。

具有多線程能力的計算機因有硬體支援而能夠在同一時間執行多個線程,提升性能。

1.2并發和并行【了解】

  • 并行:在同一時刻,有多個指令在多個CPU上同時執行。
  • 并發:在同一時刻,有多個指令在單個CPU上交替執行。

1.3程序和線程【了解】

  • 程序:是正在運作的程式(資源配置設定的基本機關)

    獨立性:程序是一個能獨立運作的基本機關,同時也是系統配置設定資源和排程的獨立機關

    動态性:程序的實質是程式的一次執行過程,程序是動态産生,動态消亡的

    并發性:任何程序都可以同其他程序一起并發執行

  • 線程:是程序中的單個順序控制流,是一條執行路徑(排程的基本機關)

    ​ 單線程:一個程序如果隻有一條執行路徑,則稱為單線程程式

    ​ 多線程:一個程序如果有多條執行路徑,則稱為多線程程式

1.4實作多線程方式一:繼承Thread類【應用】

  • 方法介紹
方法名 說明
void run() 線上程開啟後,此方法将被調用執行
void start() 使此線程開始執行,Java虛拟機會調用run方法()
  • 實作步驟
  • 定義一個類MyThread繼承Thread類
  • 在MyThread類中重寫run()方法
  • 建立MyThread類的對象
  • 啟動線程
  • 代碼示範
public class MyThread extends Thread{
    @Override
    public void run() {
        //線程開啟後執行的代碼
        for (int i = 1; i <= 100; i++) {
            System.out.println("線程開啟了"+i);
        }
    }
}      
public class Test {
    public static void main(String[] args) {
        //建立一個線程對象
        MyThread t1 = new MyThread();
        //建立一個線程對象
        MyThread t2 = new MyThread();

        //開啟一個線程
        t1.start();
        //開啟一個線程
        t2.start();
    }
}      

兩個小問題

  • 為什麼要重寫run()方法?

    因為run()是用來封裝被線程執行的代碼

  • run()方法和start()方法的差別?

    run():封裝線程執行的代碼,直接調用,相當于普通方法的調用(不會開啟線程交替執行,而是順序執行)

    start():啟動線程、會交替執行;然後由JVM調用此線程的run()方法