黑马程序员技术交流社区
标题:
多线程的生产者和消费者实例。
[打印本页]
作者:
Eagle
时间:
2014-10-24 13:24
标题:
多线程的生产者和消费者实例。
//producer:生产者,制片人 consumer:消费者,用户
class ProducerConsumerDemo
{
public static void main(String[] args)
{
//创建resource对象
Resource res = new Resource();
//创建producer对象
Producer pro = new Producer(res);
//创建Consumer对象
Consumer con = new Consumer(res);
//创建4个线程
Thread t1 = new Thread(pro);
Thread t2 = new Thread(con);
Thread t3 = new Thread(pro);
Thread t4 = new Thread(con);
//启动四个线程
t1.start();
t2.start();
t3.start();
t4.start();
}
}
//resource:资源
class Resource
{
//私有的产品名称
private String name;
//私有的计数器,产品编号
private int count = 1;
//布尔型变量,用于判断线程要执行哪里
private boolean flag = false;
//加同步锁的set,设置产品名称的方法。
public synchronized void set(String name)
{
while(true)
{
//判断flag是否真
// if (flag)
//while循环判断,当线程被解除冻结后需要回来再判断一次
while (flag)
{
//wait:等待,把当前线程冻结起来。等待notify(通知,告知)唤醒,notifyAll:唤醒全部线程
try{wait();}catch(Exception e){}
}
//把传入的name加上计数器赋值给本类的name
this.name = name+"+==+"+count++;
//打印当前线程name和当前生产者的name
System.out.println(Thread.currentThread().getName()+".生产者.SS."+this.name);
//把flag的值改为true。
flag = true;
//唤醒第一个冻结的线程
// this.notify();
//唤醒所有线程
this.notifyAll();
}
}
//输出函数,输出产品名称和编号
public synchronized void out()
{
while(true)
{
//if判断flag是否为false,线程被唤醒后继续执行,不再回来判断
// if (!flag)
//while循环判断,当线程被解除冻结后需要回来再判断一次
while (!flag)
{
//flag为false时,线程进入等待状态,没有执行资格,等待唤醒
try{wait();}catch(Exception e){}
}
//打印当前线程名称和购买者名称
System.out.println(Thread.currentThread().getName()+".购买者.GOGOGO."+this.name);
//修改flag的值为false;
flag = false;;
//唤醒最先冻结的线程
// this.notify();
//唤醒所有线程
this.notifyAll();
}
}
}
//创建类producer,实现多线程Runnable接口。
class Producer implements Runnable
{
//建立resource引用
private Resource res;
//初始化引用
Producer(Resource res)
{
//把引用指向类resource
this.res = res;
}
//复写run方法
public void run()
{
// while(true)
// {
//调用set函数,对产品名称进行设置
res.set("雀氏挖掘机");
// }
}
}
class Consumer implements Runnable
{
//建立引用
private Resource res;
//初始化
Consumer(Resource res)
{
//res赋值
this.res = res;
}
//复写run函数
public void run()
{
// while(true)
// {
//调用out函数。
res.out();
// }
}
}
复制代码
写完这个,听到毕老师说:啊,这个下节课给你们画图演示一下啊!
到了下节课。只看到画面上画好的一张有着勾勾叉叉的图就在那儿放着。。。。
然后毕老师说:
这个,咳咳。图已经画好了,你们那个、、心里明白怎么画的啊。。我就不说了
。。。。。。然后毕老师的阴笑声:嘿嘿。。那个,看视频的同学可能不知道,来给你们看一下啊、、。。。。。。。。===================== 0.0 0.0 0.0 0.0 0.0
我闭目深呼吸,抬头,食指指向天空,然后厉声大吼道:毕老师你就可劲坑吧!
:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2