iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 3
0
Software Development

30 天介紹 Java 的 Thread系列 第 3

Day3:寫簡單 Java Thread Sample Code (一)

相信有寫過 Java 的人都會知道要如何寫 Thread,今天就來簡單的練習一下如何使用 Java 的程式開多執行緒的程式。

在寫 Thread 之前,我們來寫一支最簡單的程式碼,如下:

public class HelloWorld {
    public static void main(String args[]) {
        System.out.println("HELLO WORLD");
    }
}

上面的程式碼是在剛學 Java 時會寫到的程式碼,相信大家都寫過這一段 code,這一支程式主要是單執行緒的程式碼。在閱讀程式或是 Debug 時都很單純,只要由上往下看就可以清楚的了解到程式的邏輯。

現在來看要如何的寫多執行緒的程式,在寫多執行緒的程式主要可以有二種做法一種是繼承 Thread 這個 class,另外一種是實作 Runnable 這個 interface。使用實作 Runnable 的好處是 interface 可以多重的繼承,並且還可以 extends 其它需要用到的 class,簡單的寫法如下:

public class ThreadTest1 extends Example implements Runnable {
    @Override
    public void run() {
      //TODO
    }
}

上面的程式碼就是可以繼承現有的 Example class 和實作多執行緒 Runnable 的 run 方法,因此在開發程式上彈性會較大。

以下使用繼承 Thread class 來實作多執行緒程式,另外一種實作 Runnable Interface 的方法留到下一篇來介紹。

繼承 Thread class的方式:

public class ThreadExample1 extends Thread {
    private String message;
    public ThreadExample1(String message) {
      this.message = message;
    }
    public void run() {
      System.out.println("Thread message is:" + this.message);
    }
}

繼承 Thread class 並且實作 run 的方法,用來印出建構子傳入到 message 變數的值

public class Test {
    public static void main(String args[]) {
      ThreadExample1 thread1 = new ThreadExample1("message1");
      ThreadExample1 thread2 = new ThreadExample1("message2");
      ThreadExample1 thread3 = new ThreadExample1("message3");
      ThreadExample1 thread4 = new ThreadExample1("message4");
      ThreadExample1 thread5 = new ThreadExample1("message5");
      ThreadExample1 thread6 = new ThreadExample1("message6");
      ThreadExample1 thread7 = new ThreadExample1("message7");
      ThreadExample1 thread8 = new ThreadExample1("message8");
      ThreadExample1 thread9 = new ThreadExample1("message9");
      ThreadExample1 thread10 = new ThreadExample1("message10");
      thread1.start();
      thread2.start();
      thread3.start();
      thread4.start();
      thread5.start();
      thread6.start();
      thread7.start();
      thread8.start();
      thread9.start();
      thread10.start();
    }
}

上面的程式會在主程式裡面開啟 10 個執行緒,如果呼叫到 start 的方法就是用來啟動執行 Thread 的動作,執行的結果如下:

Thread message is:message1
Thread message is:message2
Thread message is:message4
Thread message is:message6
Thread message is:message8
Thread message is:message10
Thread message is:message5
Thread message is:message9
Thread message is:message7
Thread message is:message3

我們會發現到印出的值不會從 1 到 10 有順序的印出,而且每次執行程式都會印出不同的結果。有可能執行的前幾次都會印出 messag1 到 message10 的結果,但執行更多次就會發現輸出的值是無法預期的。因此我們在撰寫多執行緒的程式時需要多測試幾次才會發現程式有問題。


上一篇
Day2 介紹常見的名詞以及 Concurrent 和 Parallel 之間的差別
下一篇
Day4:寫簡單 Java Thread Sample Code (二)
系列文
30 天介紹 Java 的 Thread30

尚未有邦友留言

立即登入留言