Java三章学习内容(生产者与消费者)

一.该章节的内容主要学习线程的交替执行并且数据要安全,要使用到带参构造改写run方法synchronized代码块wait()以及notify()的使用

参考代码:

属性类:  创建电影名,电影描述的熟悉,给予getset方法
public class Film {
private String FilmName;
private String FilmDescription;

public String getFilmName() {
return FilmName;
}
public void setFilmName(String filmName) {
FilmName = filmName;
}
public String getFilmDescription() {
return FilmDescription;
}
public void setFilmDescription(String filmDescription) {
FilmDescription = filmDescription;
}

}

生产者:
public class Producer implements Runnable{
private Film film=null;
public Producer(Film film) {
super();
this.film = film;
}

private boolean flag=false;
public void run() {
for (int i = 0; i < 50; i++) {
synchronized (film) {
if (film.getFilmName()!=null&&film.getFilmName()!=null) {
try {
film.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

if (flag) {
this.film.setFilmName("变形金刚");
this.film.setFilmDescription("一部科幻电影");
System.out.println(Thread.currentThread().getName()+"生产了"+this.film.getFilmName()+this.film.getFilmDescription());
flag=false;

film.notify();
}else  {
this.film.setFilmName("神偷奶爸");
this.film.setFilmDescription("一部动画片");
System.out.println(Thread.currentThread().getName()+"生产了"+this.film.getFilmName()+this.film.getFilmDescription());
flag=true;

film.notify();
}
}
}
}
}

消费者:
public class Consumer implements Runnable{
private Film film=null;
public Consumer(Film film) {
super();
this.film = film;
}
public void run() {
synchronized (film) {
for (int i = 0; i < 50; i++) {
if (film.getFilmName()==null&&film.getFilmName()==null) {
try {
film.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"消费了:"+this.film.getFilmName()+this.film.getFilmDescription());
film.setFilmDescription(null);
film.setFilmName(null);
film.notify();
}
}
}
}

测试类:
public class Text3 {
public static void main(String[] args) {
Film film = new Film();
Thread producer = new Thread(new Producer(film));
Thread consumer = new Thread(new Consumer(film));
producer.setName("生产者");
   consumer.setName("消费者");
producer.start();
consumer.start();
}
}



猜你喜欢

转载自blog.csdn.net/jayvergil/article/details/80298378