[java]代码库
public class Goods {//商品类
//私有属性
private String brand;//品牌
private String name;//商品的名称
private boolean flag;//标识是否有商品,默认值是false,代表没有商品,
//公有的取值,赋值方法
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 synchronized void produc(String brand,String name){
if (flag) {//flag的值为false时,没有商品,生产者生产商品,如果flag的值为true时,代表有商品,生产者等待
try {
super.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//调用的是Object类中的wait方法
}//被唤醒后,代表没有商品了,没有商品就开始生产
this.brand=brand;//局部变量的值赋值给成员变量
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.name=name;
System.out.println("生产者生产了"+this.brand+"----------------"+this.name);
/**商品生产结束*/
flag=true;
super.notify();//通知消费者线程
}
//消费者取走商品的同步方法
public synchronized void custom(){
if (flag==false) {//没有商品时,消费者等待,
try {
super.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//没有商品时,消费者等待
}//有商品时,取走商品
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("--------------------消费者取走了商品-----------"+this.brand+"==========="+this.name);
/**商品已取走*/
flag=false;
super.notify();
}
}
//生产者线程
public class Producer implements Runnable {
//共享资源作为类的属性有属性
private Goods g;
//带参构造方法
public Producer(Goods g) {
super();
this.g = g;
}
@Override
public void run() {//生产者要做的事情是生产商品
for (int i = 0; i <10; i++) {
if (i%2==0) {//偶数
//调用生产商品的方法
g.produc("娃哈哈", "矿泉水");
}else {//奇数
g.produc("旺仔", "小馒头");
}
}
}
}
package cn.bjsxt.pc3;
//生产者线程
public class Producer implements Runnable {
//共享资源作为类的属性有属性
private Goods g;
//带参构造方法
public Producer(Goods g) {
super();
this.g = g;
}
@Override
public void run() {//生产者要做的事情是生产商品
for (int i = 0; i <10; i++) {
if (i%2==0) {//偶数
//调用生产商品的方法
g.produc("娃哈哈", "矿泉水");
}else {//奇数
g.produc("旺仔", "小馒头");
}
}
}
}
//消费者的线程-->负责取商品
public class Customer implements Runnable {
//共享资源是商品
private Goods gg;//共享资源作为线程类的私有属性
//带参构造方法
public Customer(Goods gg) {
super();
this.gg = gg;
}
@Override
public void run() {//这是消费者线程,负责取走商品
for (int i = 0; i <10; i++) {
//调用取走的同步方法
gg.custom();
}
}
}
public class Test {
public static void main(String[] args) {
/**1.创建共享资源的对象*/
Goods g=new Goods();
/**2.创建生产者线程的对象*/
Producer p=new Producer(g);
/**3.创建消费者线程的对象*/
Customer c=new Customer(g);
//启动两个线程
new Thread(p).start();//启动生产者线程
new Thread(c).start();//启动消费者线程
}
}
初级程序员
by: 云代码会员 发表于:2016-10-15 20:46:35 顶(0) | 踩(0) 回复
可以
回复评论