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

多线程编程之生产者消费者(java实现)

2014-04-10 02:27 387 查看

import java.util.Random;

import java.util.concurrent.*;

class Buffer{

final int SIZE=5;

int buffer[]=new int [SIZE];

int in=-1,out=-1;

}

class Producer extends Thread{

Semaphore mutex,empty,full;

Buffer buffer;

public Producer(Semaphore m,Semaphore e,Semaphore f, Buffer buf){

mutex=m;empty=e;full=f;

buffer=buf;

}

public void run(){

Random r=new Random();

for(int i=0;i<10;i++){

try{

empty.acquire();

mutex.acquire();

buffer.in=(buffer.in+1)%buffer.SIZE;

buffer.buffer[buffer.in]=r.nextInt()%10000;

System.out.println(this.getId()+" produce a item:"+buffer.buffer[buffer.in]);

mutex.release();

full.release();

}catch(Exception e){

e.printStackTrace();

}

}

}

}

class Consumer extends Thread{

Semaphore mutex,empty,full;

Buffer buffer;

public Consumer(Semaphore m,Semaphore e,Semaphore f, Buffer buf){

mutex=m;empty=e;full=f;

buffer=buf;

}

public void run(){

for(int i=0;i<10;i++){

try{

full.acquire();

mutex.acquire();

buffer.out=(buffer.out+1)%buffer.SIZE;

int value=buffer.buffer[buffer.out];

System.out.println(this.getId()+ " get a item:"+value);

buffer.buffer[buffer.out]=-1;

mutex.release();

empty.release();

}catch(Exception e){

e.printStackTrace();

}

}

}

}

public class ProducerAndComsuer {

public static void main(String args[]){

Buffer buf =new Buffer();

Semaphore mutex=new Semaphore(1);

Semaphore empty=new Semaphore(buf.SIZE);

Semaphore full=new Semaphore(0);

//一个生产者,一个消费者

/* Producer p=new Producer(mutex,empty,full,buf);

Consumer c=new Consumer(mutex,empty,full,buf);

p.start();c.start();*/

//多个生产者和消费者

Producer ps[]=new Producer[10];

Consumer cs[]=new Consumer[10];

for(int i=0;i<3;i++){

ps[i]=new Producer(mutex,empty,full,buf);

cs[i]=new Consumer(mutex,empty,full,buf);

ps[i].start();

cs[i].start();

}

}

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