6 多個執行緒的共享資料

2021-08-02 04:26:21 字數 2263 閱讀 5259

1、方式

1,如果每個執行緒執行的**相同,可以使用同乙個runnable物件,這個runnable物件中有那個共享資料,例如,賣票系統就可以這麼做。

2,如果每個執行緒執行的**不同,這時候需要用不同的runnable物件,例如,設計4個執行緒。其中兩個執行緒每次對j增加1,另外兩個執行緒對j每次減1,銀行訪問款

賣票系統:

package cn.itcast.thread;

/**

* 多執行緒共享資料-賣票系統

*@author hejingyuan

* */

public

class

sellticket

} class ticket implements runnable

}

}

結果:

當前票數為:9

當前票數為:8

當前票數為:7

當前票數為:6

當前票數為:5

當前票數為:4

當前票數為:3

當前票數為:2

當前票數為:1

當前票數為:0

簡單的多執行緒間資料共享,每個執行緒執行的**不同,用不同的runnable物件

package cn.itcast.thread;

public

class

testthread

}).start();

new thread(new runnable()

}).start();

}

}

} class mydata

public

synchronized

void

dec()

}

執行緒thread-0j為:1

執行緒thread-1j為:0

執行緒thread-2j為:1

執行緒thread-3j為:0

銀行訪問款例項:

package cn.itcast.thread;

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()

} }

新存入:849 共計:849

取款:865 餘額:849 餘額不足,正在等待存款...

...新存入:95 共計:944

取出:865 還剩餘:79

新存入:825 共計:904

取出:874 還剩餘:30

新存入:533 共計:563

取款:865 餘額:563 餘額不足,正在等待存款...

...新存入:71 共計:634

取款:865 餘額:634 餘額不足,正在等待存款...

...新存入:606 共計:1240

取出:865 還剩餘:375

取款:801 餘額:375 餘額不足,正在等待存款...

...新存入:868 共計:1243

多個執行緒間如何共享資料?

如果每個縣城執行的 相同,可以使用同乙個runnable物件,這個runnable物件中有那個共享資料。將共享資料封裝成另乙個物件,然後將這個物件逐一傳遞給各個runnable物件,每個執行緒對共享資料的操作方法也分配到那個物件身上,這樣容易實現針對資料進行各個操作的互斥和通訊。將runnable物...

java併發 多個執行緒間共享資料

先看乙個多執行緒間共享資料的問題 設計四個執行緒,其中兩個執行緒每次對data增加1,另外兩個執行緒每次對data減少1。從問題來看,很明顯涉及到了執行緒間通資料的共享,四個執行緒共享乙個data,共同操作乙個data。我們先把上面這個問題放在一邊,慢慢分析多個執行緒之間共享資料的一些情況,從最簡單...

建立多個執行緒 資料共享問題分析

join 多個執行緒執行順序是亂的,跟作業系統內部對執行緒的排程機制有關。主線程等待子執行緒執行完畢後才執行 void myprint int item int main for auto iter mythread.begin iter mythread.end iter cout hello w...