多线程编程之生产者消费者(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();
}
}
}
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();
}
}
}
相关文章推荐
- Java 技术: 使您轻松地进行多线程应用程序编程——Consumer 类可以简化生产者-消费者行为的实现
- Java多线程实现消费者/生产者模式
- JAVA多线程-线程间通信(二)-生产者/消费者模式实现
- Java并发编程笔记 使用阻塞队列实现生产者-消费者模型
- Java Note: 多线程的同步(互斥锁)的方法对比,信号量锁,读写锁的实现,生产者-消费者模式的实现
- java多线程总结六:经典生产者消费者问题实现
- Java_多线程下的生产者与消费者实现
- Java 多线程实现生产者消费者问题(wait/notify)
- Java多线程 多个生产者和多个消费者实现同步 jdk1.5
- JAVA多线程实现生产者——消费者
- Java Note: 多线程的同步(互斥锁)的方法对比,信号量锁,读写锁的实现,生产者-消费者模式的实现
- Java多线程实现生产者消费者程序(Wait,Notify实现和Lock,Condition实现)
- 进程同步-生产者和消费者(PV操作实现——java多线程模拟)
- Java多线程生产者消费者调度实现
- JAVA实现多线程生产者消费者模型
- Java多线程 - 实现生产者与消费者模式
- Java Note: 多线程的同步(互斥锁)的方法对比,信号量锁,读写锁的实现,生产者-消费者模式的实现
- java使用多线程实现生产者消费者问题
- java 多线程 22 :生产者/消费者模式 进阶 利用await()/signal()实现
- java多线程总结六:经典生产者消费者问题实现