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...