**
1,如果每個執行緒執行的**相同,可以使用同乙個runnable物件,這個runnable物件中有那個共享資料,例如,賣票系統就可以這麼做。
2,如果每個執行緒執行的**不同,這時候需要用不同的runnable物件,例如,設計4個執行緒。其中兩個執行緒每次對j增加1,另外兩個執行緒對j每次減1,銀行訪問款
有兩種方法來解決此類問題:
將共享資料封裝成另外乙個物件,然後將這個物件逐一傳遞給各個runnable物件,每個執行緒對共享資料的操作方法也分配到那個物件身上完成,這樣容易實現針對資料進行各個操作的互斥和通訊
將runnable物件作為乙個類的內部類,共享資料作為這個類的成員變數,每個執行緒對共享資料的操作方法也封裝在外部類,以便實現對資料的各個操作的同步和互斥,作為內部類的各個runnable物件呼叫外部類的這些方法。
下面逐一介紹
賣票系統demo:
執行
簡單的多執行緒間資料共享,每個執行緒執行的**不同,用不同的runnable物件
package com.xujishou;
public class sellticket }
class ticket implements runnable }}
設計4個執行緒。
其中兩個執行緒每次對j增加1,另外兩個執行緒對j每次減1
public class testthread
}).start();
new thread(new runnable()
}).start();
}} }
class mydata
public synchronized void dec()
}
public class acount
public synchronized void getmoney(int money) catch (exception e)
}this.money = this.money - money;
system.out.println("取出:" + money + " 還剩餘:" + this.money);
}public synchronized void setmoney(int money) catch (exception e)
this.money = this.money + money;
system.out.println("新存入:" + money + " 共計:" + this.money);
notify();
}public static void main(string args) }
// 存款類
class bank implements runnable
public void run()
} }// 取款類
class consumer implements runnable
public void run() }}
其實多執行緒間的共享資料最主要的還是互斥,多個執行緒共享乙個變數,針對變數的操作實現原子性即可。 多執行緒 資料共享
package thread 需求 簡單的買票程式 需多個視窗同時買票,實現資料共享 實現方式和繼承方式有什麼區別?實現方式避免了單繼承的侷限性。具體步驟 1.定義類實現runnable介面 2.覆蓋runnable介面中的run方法 3.通過thread類建立執行緒物件 4.將runnable介面...
多執行緒間共享物件和資料方式
一 若每個執行緒執行的 相同,可以用同乙個runnable物件,runnable裡面有共享的物件和資料,例如賣票系統,5個執行緒共同賣100張票 public class threadtest2 class shareticket implements runnable 二 若每個執行緒執行的 不同...
多執行緒要訪問共享資料的方式
1.如果每個執行緒執行的 相同,可以使用同乙個runnable物件,這個runnable物件中有那個共享資料,例如 賣票系統 2.如果每個執行緒執行的 不同,這時候需要不同的runnable物件,有如下2種方式來實現這些runnable物件之間的資料共享 1 將共享資料封裝到另外乙個物件中,然後將這...