天天看點

Java中的多線程建立方式

線程與程序

  • 程序:是指一個記憶體中運作的應用程式,每個程序都有一個獨立的記憶體空間,一個應用程式可以同時運作多個程序;程序也是程式的一次執行過程,是系統運作程式的基本機關;系統運作一個程式即是一個程序從建立、運作到消亡的過程。
  • 線程:線程是程序中的一個執行單元,負責目前程序中程式的執行,一個程序中至少有一個線程。一個程序中是可以有多個線程的,這個應用程式也可以稱之為多線程程式。

    簡而言之:一個程式運作後至少有一個程序,一個程序中可以包含多個線程

建立線程類方式一(繼承Thread類)

Java使用​

​java.lang.Thread​

​類代表線程,所有的線程對象都必須是Thread類或其子類的執行個體。每個線程的作用是完成一定的任務,實際上就是執行一段程式流即一段順序執行的代碼。Java使用線程執行體來代表這段程式流。Java中通過​

​繼承Thread類來​

​建立并啟動多線程**的步驟如下:

  1. 定義Thread類的子類,并重寫該類的run()方法,該run()方法的方法體就代表了線程需要完成的任務,是以把run()方法稱為線程執行體。
  2. 建立Thread子類的執行個體,即建立了線程對象
  3. 調用線程對象的start()方法來啟動該線程
public class test {


    public static class MyThread extends Thread{
        public MyThread(String name){
            //
            super(name);
        }
        /*
        * 重寫父類run方法
        * 定義線程要執行的方法
        * */
        public void run(){
            for (int i = 0; i < 20; i++) {
                //拿到姓名
                System.out.println(getName()+i);
            }
        }
    }
    public static void main(String[] args) {
        System.out.println("這是主線程");
        MyThread thread = new MyThread("小強");
        //開啟新的線程
        thread.start();
        for (int i = 0; i < 20; i++) {

            System.out.println("旺财"+i);
        }
    }
}
      
Java中的多線程建立方式

執行的流程題:

多線程執行時,到底在記憶體中是如何運作的呢?以上個程式為例,進行圖解說明:

多線程執行時,在棧記憶體中,其實每一個執行線程都有一片自己所屬的棧記憶體空間。進行方法的壓棧和彈棧

Java中的多線程建立方式

當執行線程的任務結束了,線程自動在棧記憶體中釋放了。但是當所有的執行線程都結束了,那麼程序就結束了

Thread類

建立線程方式二(實作Runnable接口)

  1. 定義Runnable接口的實作類,并重寫該接口的run()方法,該run()方法的方法體同樣是該線程的線程執行體。
  2. 建立Runnable實作類的執行個體,并以此執行個體作為Thread的target來建立Thread對象,該Thread對象才是真正

    的線程對象。

  3. 調用線程對象的start()方法來啟動線程
public class MyRunnable implements Runnable{
    @Override
    public void run() {
    for (int i = 0; i < 20; i++) {
    System.out.println(Thread.currentThread().getName()+" "+i);
    }
  }
}      
public class Demo {
public static void main(String[] args) {
    //建立自定義類對象 線程任務對象
    MyRunnable mr = new MyRunnable();
    //建立線程對象
    Thread t = new Thread(mr, "小強");
    t.start();
    for (int i = 0; i < 20; i++) {
    System.out.println("旺财 " + i);
  }
  }
}      

實作Runnable接口比繼承Thread類所具有的優勢:

  1. 适合多個相同的程式代碼的線程去共享同一個資源。
  2. 可以避免java中的單繼承的局限性。
  3. 增加程式的健壯性,實作解耦操作,代碼可以被多個線程共享,代碼和線程獨立。
  4. 線程池隻能放入實作Runable或Callable類線程,不能直接放入繼承Thread的類

建立線程方式三(實作 Callable 接口)

建立線程方式四(應用程式可以使用 Executor 架構來建立線程池 )

新建立一個公衆号 Rockey小何同學 想互相交流的同學可以關注一下哈! 感謝支援!