《黑马程序员》java笔记->生产消费多线程,同步代码块(优化代码)
2013-06-15 21:07
573 查看
------- android培训、java培训、期待与您交流! ----------
/*
等待唤醒机制中经典的问题:生产者消费者问题。
代码已优化
*/
class Resource
{
private String name;
private int count;
private boolean flag;
public synchronized void set(String name)
{
if(flag)
try{this.wait();}catch(InterruptedException e){}
//name,count连着用
this.name=name+count;
count++;
System.out.println(Thread.currentThread().getName()+"^^^^生产者…………"+this.name);
flag=true;
this.notify();
}
public synchronized void get()
{
if(!flag)
try{this.wait();}catch(InterruptedException e){}
System.out.println(Thread.currentThread().getName()+"^^^^消费者…………"+this.name);
flag=false;
this.notify();
}
}
class Producer implements Runnable
{
private Resource r;
Producer(Resource r)
{
this.r=r;
}
public void run()
{
while(true)
{
r.set("馒头");
}
}
}
class Consumer implements Runnable
{
private Resource r;
Consumer(Resource r)
{
this.r=r;
}
public void run()
{
while(true)
{
r.get();
}
}
}
class ProConDemo
{
public static void main(String[] args)
{
Resource r=new Resource();
Producer p=new Producer(r);
Consumer c=new Consumer(r);
Thread t1=new Thread(p);
Thread t2=new Thread(c);
t1.start();
t2.start();
}
}
/*
等待唤醒机制中经典的问题:生产者消费者问题。
代码已优化
*/
class Resource
{
private String name;
private int count;
private boolean flag;
public synchronized void set(String name)
{
if(flag)
try{this.wait();}catch(InterruptedException e){}
//name,count连着用
this.name=name+count;
count++;
System.out.println(Thread.currentThread().getName()+"^^^^生产者…………"+this.name);
flag=true;
this.notify();
}
public synchronized void get()
{
if(!flag)
try{this.wait();}catch(InterruptedException e){}
System.out.println(Thread.currentThread().getName()+"^^^^消费者…………"+this.name);
flag=false;
this.notify();
}
}
class Producer implements Runnable
{
private Resource r;
Producer(Resource r)
{
this.r=r;
}
public void run()
{
while(true)
{
r.set("馒头");
}
}
}
class Consumer implements Runnable
{
private Resource r;
Consumer(Resource r)
{
this.r=r;
}
public void run()
{
while(true)
{
r.get();
}
}
}
class ProConDemo
{
public static void main(String[] args)
{
Resource r=new Resource();
Producer p=new Producer(r);
Consumer c=new Consumer(r);
Thread t1=new Thread(p);
Thread t2=new Thread(c);
t1.start();
t2.start();
}
}
相关文章推荐
- java中多线程模拟(多生产,多消费,Lock实现同步锁,替代synchronized同步代码块)
- 《黑马程序员》java笔记->多线程安全问题
- 《黑马程序员》java笔记->多线程,同步锁
- Java多线程实例->生产消费模式
- Java笔记3 多线程<2>线程间通信-代码分析以及多线程常见方法的运用
- 《黑马程序员》java笔记-> CSS介绍
- java 多线程学习笔记2-同步代码块,死锁
- 《黑马程序员》java笔记->【03.1.0】关于内部类
- 《黑马程序员》java笔记->【03】关于多态
- 《黑马程序员》java笔记->HTML
- 《黑马程序员》java笔记->【03.1.1】匿名内部类
- Java 基础一些代码练习笔记( GenericFoo<T> 泛型)
- 《黑马程序员》java笔记->【03】关于继承与覆盖
- java笔记--使用线程池优化多线程编程
- 《黑马程序员》java笔记->关于list列表
- 《黑马程序员》java笔记->JavaScript
- 《黑马程序员》java笔记->【02】java的内存划分
- 《黑马程序员》java笔记->【03.2.0】异常介绍
- 《黑马程序员》java笔记->集合List中:ArrayList,LinkedList,及队列设计例子
- 简单生产消费模式的代码流程(Java代码)