1. 程式人生 > >java多執行緒 基礎

java多執行緒 基礎

引入

 1.什麼是執行緒

          執行緒是程式執行的一條路徑, 一個程序中可以包含多條執行緒

          多執行緒併發執行可以提高程式的效率, 可以同時完成多項工作

 2.多執行緒的應用場景

          紅蜘蛛同時共享螢幕給多個電腦

          迅雷開啟多條執行緒一起下載

          QQ同時和多個人一起視訊

          伺服器同時處理多個客戶端請求

併發與並行

並行就是兩個任務同時執行,就是甲任務進行的同時,乙任務也在進行。(需要多核CPU)

 併發是指兩個任務都請求執行,而處理器只能按受一個任務,就把這兩個任務安排輪流進行,由於時間間隔較短,使人感覺兩個任務都在執行。

 比如我跟兩個網友聊天,左手操作一個電腦跟甲聊,同時右手用另一臺電腦跟乙聊天,這就叫並行。

 如果用一臺電腦我先給甲發個訊息,然後立刻再給乙發訊息,然後再跟甲聊,再跟乙聊。這就叫併發。

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

 A:Java程式執行原理

          Java命令會啟動java虛擬機器,啟動JVM,等於啟動了一個應用程式,也就是啟動了一個程序。該程序會自動啟動一個 “主執行緒” ,然後主執行緒去呼叫某個類的 main 方法。

        

 B:JVM的啟動是多執行緒的嗎

          JVM啟動至少啟動了垃圾回收執行緒和主執行緒,所以是多執行緒的。

 

多執行緒的實現方式三種

1 繼承thread 類 2實現Runnable介面3使用ExecutorService、Callable、Future實現有返回結果的多執行緒

1 繼承thread 類

class MyThread extends Thread {                            //1,定義類繼承Thread
    public void run() {                                  //2,重寫run方法
        for(int i = 0; i < 3000; i++) {                      //3,將要執行的程式碼,寫在run方法中
            System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
        }
    }
}



    public class Test {
        public static void main(String[] args) {
            MyThread mt = new MyThread();                    //4,建立自定義類的物件
            mt.start();                                     //5,開啟執行緒
        }
    }

2實現Runnable

public class Demo3_Runnable {

    public static void main(String[] args) {
        MyRunnable mr = new MyRunnable();                 //4,建立自定義類物件
        //Runnable target = new MyRunnable();
        Thread t = new Thread(mr);                      //5,將其當作引數傳遞給Thread的建構函式
        t.start();                                  //6,開啟執行緒

        for(int i = 0; i < 3000; i++) {
            System.out.println("bb");
        }
    }
}

class MyRunnable implements Runnable {                   //1,自定義類實現Runnable介面
    @Override
    public void run() {                                  //2,重寫run方法
        for(int i = 0; i < 3000; i++) {                      //3,將要執行的程式碼,寫在run方法中
            System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
        }
    }

}

多執行緒(獲取名字和設定名字)

 

new Thread("設定執行緒名字") {

    public void run() {

                   System.out.println(this.getName() + "....獲取執行緒名字");

        }

  }.start(); 


Thread t2=new Thread() {

    public void run() {

                   System.out.println(this.getName() + "....獲取執行緒名字");

        }

  }.start();
t2.setName("設定執行緒名字");

主執行緒(獲取名字和設定名字)

 

Thread.currentThread().getName()     Thread.currentThread().setName("我是主執行緒");       
 

多執行緒(休眠執行緒 sleep 所有執行緒都休眠)

Thread.sleep(毫秒,納秒), 控制當前執行緒休眠若干毫秒1秒= 1000毫秒 1秒 = 1000 1000 1000納秒 1000000000