初步实现生产者生产商品,消费者取走商品的功能
- 商品类
package cn.sxt.thread;
public class Goods {
private String brand;
private String name;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Goods(String brand, String name) {
super();
this.brand = brand;
this.name = name;
}
public Goods() {
super();
}
//加同步锁的生产方法
public synchronized void set(String brand,String name) {
this.brand=brand;
this.name=name;
}
//加同步锁的取出方法
public synchronized void get() {
System.out.println("消费者取走了-------"+this.brand+"---"+this.name);
}
}
- 生产者类
package cn.sxt.thread;
public class Productor implements Runnable {
private Goods goods;
public Productor(Goods goods) {
this.goods=goods;
}
@Override
public void run() {
for (int i=0;i<10;i++) {
if (i%2!=0) {
goods.set("旺仔", "小馒头");
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
goods.set("娃哈哈", "矿泉水");
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("生产者线程生产了---------"+goods.getBrand()+"---"+goods.getName());
}
}
}
- 消费者类
package cn.sxt.thread;
public class Customer implements Runnable{
private Goods goods;
public Customer(Goods goods) {
this.goods=goods;
}
public Customer() {
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
goods.get();
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
- 测试类
package cn.sxt.thread;
public class Test {
public static void main(String[] args) {
//创建共享资源
Goods g =new Goods();
//创建生产者线程
Productor p = new Productor(g);
new Thread(p).start();
//创建消费者线程
Customer c= new Customer(g);
new Thread(c).start();
}
}
该模型会出现生产者重复生产,消费中重复取走的问题,要解决这个问题需要引入线程通信,请查看下一篇文章
点击这里跳转下一篇文章