一、生产者和消费者之间的关系
1、生产者将生产出来的信息不断存入一个区域内,消费者将信息从该区域内不断读取出来;
生产者录入信息
消费者读取信息
例:电影票
public class Movie {
private String name ;
private String info;
private boolean flag=true;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public synchronized void set(String name , String info){
if (!flag) {
try {
super.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
this.name=name;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.info=info;
flag=false;
super.notify();
}
public synchronized void get(){
if (flag) {
try {
super.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("名字:"+this.getName()+"--"+this.getInfo());
flag=true;
super.notify();
}
}
public class Productor implements Runnable{
private Movie movie=null;
boolean flag=false;
public Productor(Movie movie) {
super();
this.movie = movie;
}
@Override
public void run() {
for (int i = 0; i < 50; i++) {
if (flag) {
this.movie.set("变形金刚","一部科幻电影");
flag=false;
}else{
this.movie.set("神偷奶爸", "一部3d动画电影");
flag=true;
}
}
}
}
public class Consumer implements Runnable{
private Movie movie=null;
public Consumer(Movie movie) {
super();
this.movie = movie;
}
@Override
public void run() {
for (int i = 0; i < 50 ; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.movie.get();
}
}
}
public class Test {
public static void main(String[] args) {
Movie movie=new Movie();
Thread productor=new Thread(new Productor(movie));
Thread consumer=new Thread(new Consumer(movie));
productor.start();
consumer.start();
}
}