600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java多线程生产消费者_JAVA多线程实现生产者消费者的实例详解

java多线程生产消费者_JAVA多线程实现生产者消费者的实例详解

时间:2020-10-16 14:40:13

相关推荐

java多线程生产消费者_JAVA多线程实现生产者消费者的实例详解

JAVA多线程实现生产者消费者的实例详解

下面的代码实现了生产者消费者的问题

Product.Java

package consumerProducer;

public class Product {

private String id;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public Product(String id)

{

this.id=id;

}

public String toString()

{

return "product "+id;

}

}

Pool.java

package consumerProducer;

import java.util.*;

public class Pool {

private int number=0;

private Listproducts=new LinkedList();

public int getNumber() {

return number;

}

public void setNumber(int number) {

this.number = number;

}

public synchronized Product consumeProduct(){ //可以去掉synchronized关键字

if(products.size()>0)

{ Product p= products.get(0);

products.remove(0);

number--;

return p;

}

else

return null;

}

public synchronized void addProduct(Product p){ //可以去掉synchronized关键字

products.add(p);

number++;

}

}

Consumer.java

package consumerProducer;

public class Consumer implements Runnable {

private String id;

Pool pool;

public Consumer(String id,Pool pool)

{

this.id=id;

this.pool=pool;

}

@Override

public void run() {

while(!Thread.currentThread().interrupted())

{

Product product=null;

synchronized(pool){

while(pool.getNumber()<=0)//生产不足

{

try {

pool.wait();//生产者等待

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

product=pool.consumeProduct();

}

System.out.println("consuming "+id+product.toString());

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

Producer.java

package consumerProducer;

public class Producer implements Runnable{

private int i_p=0;

private String id;

Pool pool;

int i=0;

public Producer(String id ,Pool pool)

{

this.id=id;

this.pool=pool;

}

public Product createProduct()

{

return new Product(String.valueOf(++i_p));

}

@Override

public void run() {

// TODO Auto-generated method stub

while(!Thread.currentThread().interrupted())

{

Product p=new Product(String.valueOf(++i_p));

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

synchronized(pool)

{

pool.addProduct(p);

System.out.println("producer "+id+" adding product...."+p.toString());

pool.notifyAll();

}

}

}

}

Main.java

package consumerProducer;

public class Main {

public static void main(String[] args) {

// TODO Auto-generated method stub

Pool pool=new Pool();

for(int i=0;i<5;i++)

{

Thread consumer=new Thread(new Consumer("consumer "+i,pool));

Thread producer=new Thread(new Producer("producer "+i,pool));

consumer.start();

producer.start();

}

}

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。