Java Thread和Runnable的執行差異
文章目的 了解Java多執行緒操作中,Thread和Runnable的差異 實作多個Thread 實作多個Runnable 如何實作可以參考 Java Thread的基礎實踐方法 實作多個Thread 原始碼 class MyThread extends Thread{ private int ticket = 5; public void run(){ for (int i=0;i<10;i++) { if(ticket > 0){ System.out.println("ticket = " + ticket--); } } } public static void main(String[] args){ new MyThread().start(); new MyThread().start(); new MyThread().start(); } } Result ticket = 5 ticket = 4 ticket = 3 ticket = 5 ticket = 4 ticket = 5 ticket = 3 ticket = 2 ticket = 1 ticket = 2 ticket = 4 ticket = 3 ticket = 2 ticket = 1 ticket = 1 解析 透過原始碼與結果可以看到 多執行緒的呼叫是隨機的,所以在Result階段並沒有如實的呈現規律的5~1排列 每個執行續使用的資源(ticket)都是獨一歸屬個別執行緒的。 所以假設今天的業務邏輯是,活動商要賣出五張票,如果使用了如上方一樣的三個執行緒,那結果可能會賣出15張超賣了10張 實作多個Runnable 原始碼 public class MyRunnable implements Runnable { private int ticket = 5; public void run(){ for (int i=0;i<10;i++) ...