En Java, la concurrence et le multithreading permettent d'effectuer plusieurs tâches simultanément. Le modèle producteur et consommateur est un modèle de concurrence classique qui utilise des files d'attente pour coordonner les threads producteurs et les threads consommateurs, ce qui peut permettre une production et une consommation simultanées d'éléments.
La concurrence et le multithreading sont des concepts importants en Java qui permettent aux applications d'effectuer plusieurs tâches simultanément. Le modèle producteur et consommateur est un modèle classique de programmation concurrente, qui utilise des files d'attente pour coordonner les threads producteurs et les threads consommateurs.
import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.function.Supplier; public class ProducerConsumer { private static BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(); public static void main(String[] args) { Supplier<Integer> producer = () -> { while (true) { try { // 生产一个元素 int element = produce(); // 将元素放入队列 queue.put(element); // 稍作休息,模拟生产时间 Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } }; Consumer<Integer> consumer = (element) -> { while (true) { try { // 从队列中取出元素 element = queue.take(); // 消费元素 consume(element); // 稍作休息,模拟消费时间 Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } }; // 创建一个生产者线程 Thread producerThread = new Thread(producer); // 创建两个消费者线程 Thread consumerThread1 = new Thread(consumer); Thread consumerThread2 = new Thread(consumer); // 启动线程 producerThread.start(); consumerThread1.start(); consumerThread2.start(); } // 模拟生产元素的方法 private static int produce() { return (int) (Math.random() * 100); } // 模拟消费元素的方法 private static void consume(int element) { System.out.println("Consumed element: " + element); } }
Ce code simule un modèle d'un producteur et de deux consommateurs, où le producteur génère aléatoirement des éléments numériques et les met dans la file d'attente, et le Le consommateur prend des éléments de la file d'attente et les imprime. De cette manière, les applications sont capables de gérer à la fois les éléments de production et de consommation.
Vous pouvez exécuter ce code dans la ligne de commande :
$ javac ProducerConsumer.java $ java ProducerConsumer
Vous verrez le texte de sortie du fil consommateur semblable au suivant :
Consumed element: 23 Consumed element: 72 Consumed element: 15 Consumed element: 44 Consumed element: 87 ...
Cela indique que les modèles producteur et consommateur s'exécutent avec succès, consommant Le thread producteur retire et imprime les éléments produits par le thread producteur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!