源代码:
class Computer{ //定义Computer类
private String name;
private int i=0; //计算台数
private boolean flag=false; //设置标志位,true为生产,false为取走
public synchronized void set(String name){ //设置信息,即生产
if(!flag){ //当标志位为false时,不可以生产
try{
super.wait(); //等待搬走
}catch (InterruptedException e){
e.printStackTrace();
}
}
setName(name);
try{
Thread.sleep(100); //加入延迟
}catch (InterruptedException e){
e.printStackTrace();
}
i++; //生产台数+1
System.out.println("生产了第"+i+"台计算机:"+this.getName());
flag=false; //修改标志位,false表示可以搬走,不可以生产
super.notify(); //唤醒等待进程
}
public synchronized void get(){ //取得信息,即搬走
if(flag){ //标志位为true,不可以取走
try{
super.wait(); //等待生产
}catch (InterruptedException e){
e.printStackTrace();
}
}
try{
Thread.sleep(100); //加入延迟
}catch (InterruptedException e){
e.printStackTrace();
}
if(this.getName()!=null){ //生产出了计算机
System.out.println("搬走了"+this.getName()+"计算机");
}
flag=true; //修改标志位为true,表示可以生产
super.notify(); //唤醒等待进程
}
public void setName(String name){
this.name=name;
}
public String getName() {
return name;
}
}
class Producer implements Runnable{ //定义生产进程
private Computer com=null;//保存Computer引用
public Producer(Computer com){ //通过构造方法设置Computer属性内容
this.com=com;//为Computer 属性初始化
}
public void run() {//覆写run()方法
for (int i = 0; i < 20; i++) {
if (i % 2 == 0) {
this.com.set("华硕");
} else {
this.com.set("戴尔");
}
}
}
}
class Consumer implements Runnable{ //定义取走线程
private Computer com=null; //保存Computer引用
public Consumer(Computer com){ //通过构造方法设置Computer属性内容
this.com=com; //为Computer 属性初始化
}
public void run() { //覆写run()方法
for(int i=0;i<21;i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.com.get();
}
}
}
public class day01 {
public static void main(String[] args) throws Exception {
Computer c=new Computer(); //实例化Computer类
Producer pro=new Producer(c); //实例化生产类,传递Computer引用
Consumer con=new Consumer(c); //实例化取走类,传递Computer引用
new Thread(pro).start(); //启动生产线程
new Thread(con).start(); //启动取走线程
}
}
运行结果:
生产了第1台计算机:华硕
搬走了华硕计算机
生产了第2台计算机:戴尔
搬走了戴尔计算机
生产了第3台计算机:华硕
搬走了华硕计算机
生产了第4台计算机:戴尔
搬走了戴尔计算机
生产了第5台计算机:华硕
搬走了华硕计算机
生产了第6台计算机:戴尔
搬走了戴尔计算机
生产了第7台计算机:华硕
搬走了华硕计算机
生产了第8台计算机:戴尔
搬走了戴尔计算机
生产了第9台计算机:华硕
搬走了华硕计算机
生产了第10台计算机:戴尔
搬走了戴尔计算机
生产了第11台计算机:华硕
搬走了华硕计算机
生产了第12台计算机:戴尔
搬走了戴尔计算机
生产了第13台计算机:华硕
搬走了华硕计算机
生产了第14台计算机:戴尔
搬走了戴尔计算机
生产了第15台计算机:华硕
搬走了华硕计算机
生产了第16台计算机:戴尔
搬走了戴尔计算机
生产了第17台计算机:华硕
搬走了华硕计算机
生产了第18台计算机:戴尔
搬走了戴尔计算机
生产了第19台计算机:华硕
搬走了华硕计算机
生产了第20台计算机:戴尔
搬走了戴尔计算机