1. 程式人生 > >java中多執行緒的建立和啟動(1)

java中多執行緒的建立和啟動(1)

多執行緒概述

1.什麼是多執行緒

執行緒是程式執行的一條路徑,一個程序中可以包含多條執行緒;多執行緒併發執行可以提高程式的效率


2.程序和執行緒之間的關係

作業系統可以同時執行多個任務,每個任務就是程序;程序可以同時執行多個任務,每個任務就是執行緒。


3.多執行緒的應用場景

紅蜘蛛同時共享螢幕給多個電腦
迅雷開啟多條執行緒一起下載
QQ開啟多人聊天
伺服器同時處理多個客戶的請求

多執行緒並行和併發的區別

  • 並行性和併發性是兩個概念,並行性指在同一時刻,有多條指令在多個處理器上同時執行
  • 併發性指的是同一時刻只有一條指令被執行,但多個程序指令被快速切換執行是的在巨集觀上具有多個程序被同時執行的效果

Java程式執行原理和JVM的啟動是多執行緒的嗎?

  • java程式執行原理
    • Java命令啟動jvm,啟動jvm等於啟動一個應用程式,也就是啟動了一個程序,該程序會自動啟動一個“主執行緒”,然後主執行緒去呼叫某個類的main方法
  • Jvm啟動是多執行緒的的嗎
    • JVM啟動至少啟動了垃圾回收執行緒和主執行緒,所以是多執行緒

多執行緒的實現方式

1. 繼承Thread類建立執行緒類

(1) 定義Thread的子類,並重寫該類的run方法,該ru的執行體就代表了執行緒需要完成的任務,因此run()方法被稱為執行緒執行體
(2) 建立Thread子類的例項,即建立了執行緒物件

(3) 呼叫執行緒物件的start()方法啟動該執行緒

package Demo;

public class Demo1__Thread {

    public static void main(String[] args) {
        ChThread t=new ChThread();
        t.start();
        for
(int i=0;i<1000;i++) { System.out.println("我是主方法!"); } } } class ChThread extends Thread { @Override public void run() { super.run(); for(int i=0;i<1000;i++) { System.out.println("我是run方法"); } } }

上述程式碼的執行驗證了多執行緒,如果上述程式的執行過程是多執行緒的話,會發現螢幕中的 ”我是主方法”和“我是run方法” 的字樣是交替出現的,這說明了程式的的執行過程為並行執行Thread類的Start()方法啟動run()方法的執行緒,和主方法中的執行同時進行。


2.實現Runnable介面建立執行緒類

(1) 定義一個實現了Runnable介面的實現類
(2) 建立Runnable實現類的例項
(3) 將建立的例項作為Thread類的target類建立Thread物件,該物件才是真正的執行緒物件
(4) 用建立的Thread物件啟動執行緒

package xianchenhg;

public class Thread_Running implements Runnable {

    private int i;
    public void run() {
        for(;i<100;i++) {
            System.out.println(Thread.currentThread().getName()+"  "+i);
        }
    }
    public static void main(String[] args) {
        for(int i=0;i<100;i++) {
            System.out.println(Thread.currentThread().getName()+"  "+i);
            if(i==20) {
                new Thread(new Thread_Running(),"執行緒1").start();
                new Thread(new Thread_Running(),"執行緒2").start();
            }
        }
    }
}

檢視API文件,會發現Runnable介面只定義了run()方法這一個抽象方法,所以實現Runnable介面的實現類只能繼承run()方法,該方法僅作為執行緒執行體,所以,Runnable物件僅僅作為Thread物件的target,而實際的執行緒物件依然是Thread例項,Thread例項負責執行target的run()方法。