執行緒操作案例---生產者與消費者
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講師
以上程式碼將之前的兩個問題全部暴露出來。
之所以會出現內容不同步,是因為中間加入了延遲操作問題,所以有可能產生不同步的問題,可以使用同步解決設定內容的問題