线程通讯,详细解析
class Car{
private String name;
private int pic;
private boolean falg;
public Car() {
super();
}
public Car(String name, int pic, boolean falg) {
super();
this.name = name;
this.pic = pic;
this.falg = falg;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPic() {
return pic;
}
public void setPic(int pic) {
this.pic = pic;
}
public boolean isFalg() {
return falg;
}
public void setFalg(boolean falg) {
this.falg = falg;
}
@Override
public String toString() {
return "Car [name=" + name + ", pic=" + pic + ", falg=" + falg + "]";
}
}
class Producer implements Runnable{
private Car c;
private int a;
public Producer(Car c) {
super();
this.c = c;
}
@Override
public void run() {
while(a < 50) {
synchronized (c) {
if(c.isFalg()) {
System.out.println("生产了一辆 " + c.getName() + "售价:" + c.getPic());
c.setFalg(false);
a++;
c.notify();
} else {
try {
c.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
class Consumer implements Runnable{
private Car c;
public Consumer(Car c) {
super();
this.c = c;
}
@Override
public void run() {
while(true) {
synchronized (c) {
if(!c.isFalg()) {
System.out.println("购买了 " + c.getName() + "售价:" + c.getPic());
c.setFalg(true);
c.notify();
} else {
try {
c.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
public class Demo {
public static void main(String[] args) {
Car c = new Car("奔驰c200L",300000,true);
Thread t1 = new Thread(new Producer(c));
Thread t2 = new Thread(new Consumer(c));
t1.start();
t2.setDaemon(true);
t2.start();
}
}