您的位置:首页 > 编程语言 > Java开发

java多线程生产者消费者

2014-11-20 23:26 267 查看
//Java Thread  producer customer
class ThreadTest
{
public static void main(String[] args)
{
Q q=new Q();

Producer p=new Producer(q);
Customer c=new Customer(q);
Thread t0=new Thread(p);
Thread t1=new Thread(c);
t0.start();
t1.start();

for(int i=0;i<50;i++)
{
if(i==25)
{
p.stop();
c.stop();
}

System.out.println(Thread.currentThread().getName());
}
}
}

class Q
{
String name="empty";
String gender="empty";
boolean isEmpty=true;

public synchronized void Put(String name,String gender)
{
if (!isEmpty) {
try {wait();} catch (Exception ex) {}
}
this.name = name;
try {Thread.sleep(1);} catch (Exception ex) {}
this.gender = gender;
isEmpty = false;
notify();
}

public synchronized void Get()
{
if(isEmpty)
{
try{wait();}catch(Exception ex){}
}
System.out.println("name:"+this.name+"__gender:"+this.gender);
isEmpty=true;
notify();
}
}

class Producer implements Runnable
{
Q q;
boolean isStop=false;
public void stop()
{
this.isStop=true;
}
public Producer(Q q)
{
this.q=q;
}

public void run() {
int i = 0;
while (!isStop) {
if (i == 0) {
q.Put("Tim", "male");

} else {
q.Put("Lian", "female");
}
i = (i + 1) % 2;
}
}
}

class Customer implements Runnable
{
Q q;
boolean isStop=false;
public void stop()
{
this.isStop=true;
}
public Customer(Q q)
{
this.q=q;
}
public void run()
{
while(!isStop)
{
q.Get();
}
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: