Java多線程中Thread與Runnable詳解

在初學多線程部分知識時,Thread類與Runnable類是最經常接觸到的兩個經典類;可追溯至JDK1.0版本,古老的類傳說。

劇情開始啦,神祕的鮮橙多國度,賣橙子嘍(實現數據共享,產生若干線程進行同一數據的處理操作)

主角登場:斯先生(Thread),人稱”鮮橙F4“之首;

                  R小姐姐(Runnable),人稱“仙女姐姐”;

坊間議論道:斯先生那可是鮮橙國出了名的美男子;R姐姐也是咱們鮮橙莊園四千年來的美女呢;

Action:買橙子1場景開始

斯先生走來,身後跟着三個小老弟,拿着三個環保袋,直奔鮮橙莊園;

class MyThread01 extends Thread{
    private int orange = 10;
    private String name;

    public MyThread01(String name){
        this.name = name;
    }

    @Override
    public void run() {
        while(orange > 0){
            System.out.println(this.name+"買走了一個橙子,"+"還剩下"+--orange+"個橙子;");
        }
    }
}

public class ThreadTest01 {
    public static void main(String[] args) {
        Thread thread1 = new MyThread01("斯澤類");
        Thread thread2 = new MyThread01("斯西門");
        Thread thread3 = new MyThread01("斯美作");
        thread1.start();
        thread2.start();
        thread3.start();
    }
}

R姐姐翩翩來,步履輕盈,緩緩走向莊園內;

class MyThread2 implements Runnable{

    private int orange = 10;
    private String name;

    public MyThread2(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        while (orange > 0){
            System.out.println(this.name+"挑走了一個橙子,還剩下"+--orange+"個橙子啦");
        }
    }
}

public class ThreadTest02 {
    public static void main(String[] args) {
        MyThread2 thread1 = new MyThread2("R姐姐");
        new Thread(thread1).start();
        new Thread(thread1).start();
        new Thread(thread1).start();
    }
}

可以從結果看出,鮮橙F4的環保袋(Thread)裏一共裝了30個大橙子,仙女姐姐(Runnable)挑走了10個橙子;

結論:使用Runnable實現的多線程的程序類可以更好的描述出程序共享的概念(並不是說thread不可以)

Thread類是多線程的關鍵類,多線程的啓動永遠都是Thread類的start()方法

這張圖也是創建多線程的兩種方式;

其中,需要注意的就是傳入Runnable對象的那個,這裏設計到典型設計模式中的代理設計模式;
Java中多線程的處理就是典型的代理模式,
Thread類完成資源調度,系統分配輔助線程業務類;自定義線程類(MyThread)負責真實業務實現;

Thread與Runnable實現多線程的聯繫與區別:

(1)Runnable可避免Thread單繼承侷限
(2)Runnable可以更好的描述出程序共享的概念;

最後,

歡迎私聊及留言吶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章