public class Main {
public static void main(String args[]) {
Info info = new Info();
new Thread(new Produtor(info)).start();
new Thread(new Customer(info)).start();
}
}
class Info{
private boolean flag = true;
//true:表示可以生产,但是不可以取走
//false:表示可以取走,但是不可以生产
private String title;
private String content;
//线程同步解决数据乱问题-即解决title和content不一致问题
//wait()需要等待notify()的唤醒
public synchronized void set(String title,String content){
if(this.flag == false){
try {
super.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.title = title;
try{
Thread.sleep(200);
}catch (InterruptedException e){
e.printStackTrace();
}
this.content = content;
this.flag = false;
super.notify();//唤醒其他等待线程
}
public synchronized void get(){
if(this.flag == true){
try {
super.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try{
Thread.sleep(100);
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.println(this.title+"-"+this.content);
this.flag = true;
super.notify();
}
}
class Produtor implements Runnable{
private Info info;
public Produtor(Info info){
this.info = info;
}
@Override
public void run() {
for(int x = 0;x<100;x++){
if(x%2==0){
this.info.set("小明","好学生");
}else{
this.info.set("小李","坏学生");
}
}
}
}
class Customer implements Runnable{
private Info info;
Customer(Info info){
this.info = info;
}
@Override
public void run() {
for(int x=0;x<100;x++){
this.info.get();
}
}
}
本文介绍了一个使用Java实现的生产者消费者模式案例,通过线程间的同步机制保证了数据的一致性和完整性。生产者负责生成数据,消费者负责消费数据,二者通过共享内存进行交互。
2264

被折叠的 条评论
为什么被折叠?



