多執行緒共享資料的方式

2021-09-12 20:58:45 字數 1743 閱讀 2710

**

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 將共享資料封裝到另外乙個物件中,然後將這...