1. 程式人生 > >執行緒操作案例---生產者與消費者

執行緒操作案例---生產者與消費者

class Producer implements Runnable{ //通過Runnable實現多執行緒
private Info info = null; //儲存Info引用
public Producer(Info info) {
this.info = info;
}
public void run() {
boolean flag = false; //定義標記位
for(int i = 0;i < 50;i++) {
if(flag) {
this.info.setName(“李興華”);
try {
Thread.sleep(90);
}catch(InterruptedException e) {
e.printStackTrace();
}
this.info.setContent(“java講師”);
flag = false;
}else {
this.info.setName(“mldn”);
try {
Thread.sleep(90);
}catch(InterruptedException e) {
e.printStackTrace();
}
this.info.setContent(“www.baidu.com”);
flag = true;
}
}
}
}

class Info{
private String name = “李興華”; //定義name屬性
private String content = “java講師”; //定義content屬性

public void setName(String name) {
    this.name = name;
}
public void setContent(String content) {
    this.content = content;
}
public String getName() {
    return this.name;
}
public String getContent() {
    return this.content;
}

}

class Consumer implements Runnable{
private Info info = null;
public Consumer(Info info) {
this.info = info;
}
public void run() {
for(int i = 0;i < 50;i++) {
try {
Thread.sleep(90);
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.info.getName() + “–>” + this.info.getContent());
}
}
}

public class ThreadCaseDemo{
public static void main(String[] args) {
Info info = new Info();
Producer pro = new Producer(info); //生產者
Consumer con = new Consumer(info); //消費者

    new Thread(pro).start();
    new Thread(con).start();
}

}
執行結果:
李興華–>www.baidu.com
李興華–>www.baidu.com
李興華–>www.baidu.com
李興華–>www.baidu.com
mldn–>java講師
李興華–>www.baidu.com
李興華–>www.baidu.com
mldn–>java講師
mldn–>java講師
李興華–>www.baidu.com
mldn–>java講師
李興華–>www.baidu.com
李興華–>www.baidu.com
mldn–>java講師
mldn–>java講師
mldn–>java講師
李興華–>www.baidu.com
李興華–>java講師
李興華–>www.baidu.com
mldn–>java講師
mldn–>java講師
李興華–>www.baidu.com
mldn–>java講師
李興華–>www.baidu.com
李興華–>www.baidu.com
mldn–>java講師
mldn–>java講師
李興華–>www.baidu.com
李興華–>www.baidu.com
mldn–>java講師
李興華–>www.baidu.com
李興華–>java講師
李興華–>www.baidu.com
李興華–>www.baidu.com
mldn–>java講師
李興華–>www.baidu.com
李興華–>www.baidu.com
李興華–>java講師
李興華–>www.baidu.com
mldn–>java講師
mldn–>java講師
李興華–>java講師
mldn–>java講師
李興華–>www.baidu.com
mldn–>java講師
mldn–>java講師
mldn–>java講師
mldn–>java講師
mldn–>java講師
李興華–>java講師

以上程式碼將之前的兩個問題全部暴露出來。
之所以會出現內容不同步,是因為中間加入了延遲操作問題,所以有可能產生不同步的問題,可以使用同步解決設定內容的問題