实体类ApplePhone:
package com.suning.ProducerConsumer;
public class ApplePhone {
private String name;
public ApplePhone(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "ApplePhone [id=" + id + ", name=" + name + "]";
}
}
1、有界队列的形式进行模拟
package com.suning.ProducerConsumer;
import java.util.concurrent.ArrayBlockingQueue;
public class ArrayBlockingQueueDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayBlockingQueue<ApplePhone> abq=new ArrayBlockingQueue<ApplePhone>(1);
new Thread(new Producer(abq)).start();
new Thread(new Producer(abq)).start();
new Thread(new Consumer(abq)).start();
new Thread(new Consumer(abq)).start();
}
}
2、无界队列的形式进行模拟
package com.suning.ProducerConsumer;
import java.util.concurrent.LinkedBlockingQueue;
public class ConcurrentLinkedBlockingQueue {
public static void main(String[] args) {
// TODO Auto-generated method stub
//ArrayBlockingQueue<ApplePhone> abq=new ArrayBlockingQueue<ApplePhone>(1);
LinkedBlockingQueue<ApplePhone> lbq=new LinkedBlockingQueue<ApplePhone>();
new Thread(new Producer(lbq)).start();
new Thread(new Producer(lbq)).start();
new Thread(new Consumer(lbq)).start();
new Thread(new Consumer(lbq)).start();
}
}
消费者模式:
package com.suning.ProducerConsumer;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
/**
* 消费者
* @author mikewang
*
*/
public class Consumer implements Runnable{
//引用MQ
private final BlockingQueue<ApplePhone> bq;
public Consumer(BlockingQueue<ApplePhone> bq) {
super();
this.bq = bq;
}
@Override
public void run() {
// TODO Auto-generated method stub
synchronized(Consumer.class){
while(true){
try {
TimeUnit.MILLISECONDS.sleep(1000);
ApplePhone apple=bq.take();
System.out.println("手机型号为:"+apple.getId()+";"+"手机名称:"+apple.getName()+"...消费");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
生产者模式:
package com.suning.ProducerConsumer;
import java.util.concurrent.BlockingQueue;
/**
* 生产者
* @author mikewang
*
*/
public class Producer implements Runnable{
//引用MQ
private final BlockingQueue<ApplePhone> bq;
public Producer(BlockingQueue<ApplePhone> bq) {
super();
this.bq = bq;
}
@Override
public void run() {
// TODO Auto-generated method stub
synchronized(Producer.class){
for(int i=1;true;i++){
produce(i);
}
}
}
public void produce(int i){
try{
ApplePhone apple=new ApplePhone(i,"苹果 "+i);
bq.put(apple);
System.out.println("手机型号:"+apple.getName()+";"+"手机价位:"+apple.getId()+"...生产");
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
关于Java中生产者消费者模型
最新推荐文章于 2024-02-10 12:15:21 发布