Java生产者和消费者是非常常见的开发模式,可以用于解决多线程数据交互的问题。下面我们来看一下Java生产者和消费者的一个例子。
public class Producer implements Runnable{ private final BlockingQueuesharedQueue; public Producer(BlockingQueue sharedQueue) { this.sharedQueue = sharedQueue; } @Override public void run() { for(int i=1; i<=10; i++){ try { System.out.println("Produced : " + i); sharedQueue.put(i); } catch (InterruptedException ex) { Logger.getLogger(Producer.class.getName()).log(Level.SEVERE, null, ex); } } } } public class Consumer implements Runnable{ private final BlockingQueue sharedQueue; public Consumer(BlockingQueue sharedQueue) { this.sharedQueue = sharedQueue; } @Override public void run() { while(true){ try { int item = sharedQueue.take(); System.out.println("Consumed : " + item); } catch (InterruptedException ex) { Logger.getLogger(Consumer.class.getName()).log(Level.SEVERE, null, ex); } } } } public class JavaProducerConsumer { public static void main(String[] args){ BlockingQueue sharedQueue = new LinkedBlockingQueue<>(); Producer producer=new Producer(sharedQueue); Consumer consumer=new Consumer(sharedQueue); new Thread(producer).start(); new Thread(consumer).start(); } }
以上代码中,Producer是一个生产者类,用于向BlockingQueue中生产数据。Consumer则是一个消费者,用于从BlockingQueue中消费数据。JavaProducerConsumer类则创建了共享队列并实例化生产者和消费者,并启动它们。
Java生产者和消费者是一种非常有效的多线程数据交换方式,可以确保线程安全,同时提高程序的效率。