生產者與消費者問題
public class Student {
String name;
int age;
}
public class SetThread implements Runnable{
private Student s=new Student();
public SetThread(Student s){
this.s=s;
}
@Override
public void run() {
s.name="張三";
s.age=24;
}
}
public class GetThread implements Runnable{
private Student s=new Student();
public GetThread(Student s){
this.s=s;
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(s.name+"---"+s.age);
}
}
public class StudentDemo {
public static void main(String[] args) {
//建立資源
Student s=new Student();
//設定和獲取的類
SetThread st=new SetThread(s);
GetThread gt=new GetThread(s);
//執行緒類
Thread t1=new Thread(st);
Thread t2=new Thread(gt);
t1.start();
t2.start();
}
}
執行緒的安全問題:
A:是否為多執行緒環境
B:是否共享資料
C:是否有多條語句操作共享資料
解決方案:
加鎖
注意:
A:不同種類的執行緒都要加鎖。
B:不同種類的執行緒加的鎖必須是同一把。
public class Student {
String name;
int age;
}
public class SetThread implements Runnable{
private Student s=new Student();
private int x=0;
public SetThread(Student s){
this.s=s;
}
@Override
public void run() {
while(true){
synchronized (s) {
if(x%2==0){
s.name="張三";
s.age=24;
}else{
s.name="李四";
s.age=34;
}
x++;
}
}
}
}
public class GetThread implements Runnable {
private Student s = new Student();
public GetThread(Student s) {
this.s = s;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
synchronized (s) {
System.out.println(s.name + "---" + s.age);
}
}
}
}
/*
* 分析:
* 資源類:Student
* 設定學生資料:SetThread(生產者)
* 獲取學生資料:GetThread(消費者)
* 測試類:StudentDemo
*/
public class StudentDemo {
public static void main(String[] args) {
//建立資源
Student s=new Student();
//設定和獲取的類
SetThread st=new SetThread(s);
GetThread gt=new GetThread(s);
//執行緒類
Thread t1=new Thread(st);
Thread t2=new Thread(gt);
t1.start();
t2.start();
}
}
相關文章
- linux 生產者與消費者問題Linux
- java實現生產者消費者問題Java
- 面試必問:訊號量與生產者消費者問題!面試
- python中多程式消費者生產者問題Python
- 九、生產者與消費者模式模式
- 生產者消費者
- 生產者與消費者之Android audioAndroid
- 生產者消費者問題-C++程式碼實現C++
- 作業系統—生產者消費者問題詳解作業系統
- python中多執行緒消費者生產者問題Python執行緒
- 生產者消費者模型模型
- 生產者消費者模式模式
- python 生產者消費者模式Python模式
- 生產消費者模式模式
- 讀者寫者與生產者消費者應用場景
- 6、JUC:傳統的生產者消費者問題,防止虛假喚醒問題
- ActiveMQ 生產者和消費者demoMQ
- 使用wait()與notifyAll()實現生產者與消費者模式AI模式
- 生產消費問題
- 「Kafka應用」PHP實現生產者與消費者KafkaPHP
- PHP操作Beanstalkd佇列(2)生產者與消費者PHPBean佇列
- java學習回顧---生產者與消費者問題以及多執行緒補充Java執行緒
- java進階(40)--wait與notify(生產者與消費者模式)JavaAI模式
- Java實現生產者和消費者Java
- 新手練習-消費者生產者模型模型
- Python-多執行緒及生產者與消費者Python執行緒
- python執行緒通訊與生產者消費者模式Python執行緒模式
- 阻塞佇列和生產者-消費者模式佇列模式
- 訊號量實現生產者消費者(程式碼邏輯有問題,不適合多個消費者,不常用)
- Java 多執行緒基礎(十二)生產者與消費者Java執行緒
- Java多執行緒——消費者與生產者的關係Java執行緒
- python 多執行緒實現生產者與消費者模型Python執行緒模型
- GoLang中生產者消費者模式解決併發問題Golang模式
- 執行緒同步介紹及 生產者消費者問題舉例 C#版執行緒C#
- java編寫生產者/消費者模式的程式。Java模式
- Qt基於QSemaphore的生產者消費者模型QT模型
- Java多執行緒——生產者消費者示例Java執行緒
- 使用BlockQueue實現生產者和消費者模式BloC模式