在初學多線程部分知識時,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可以更好的描述出程序共享的概念;
最後,
歡迎私聊及留言吶