【发布时间】:2021-07-22 21:37:04
【问题描述】:
更新
我正在解决生产者/消费者问题,我想创建一些生产者和消费者(几个线程),我有一个问题,我该如何正确创建多个线程,这样一个任务就不会由两个线程执行(每个线程执行不同的任务)。
代码:我试图在这样的循环中这样做:
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class ProducerConsumerExample {
public static void main(String[] args) {
BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(10);
for (int i = 0; i < 10 ; i++) {
Producer producer = new Producer(blockingQueue);
Consumer consumer = new Consumer(blockingQueue);
Thread producerThread = new Thread(producer);
Thread consumerThread = new Thread(consumer);
producerThread.start();
consumerThread.start();
}
}
}
输出:但它不起作用,因为线程相互重叠
Producer produced : 1619703940537
Producer produced : 1619703940537
Producer produced : 1619703940537
Producer produced : 1619703940537
consumed gets: 1619703940537
consumed gets: 1619703940537
consumed gets: 1619703940537
consumed gets: 1619703940537
Producer produced : 1619703940537
consumed gets: 1619703940537
【问题讨论】:
-
每次循环变量都会被覆盖,这是不好的做法,并且以这种方式在循环内声明变量是不正确的。推荐的方法是使用 ExecutorService baeldung.com/java-executor-service-tutorial 和 tutorials.jenkov.com/java-util-concurrent/executorservice.html
-
打印
1619703940537的缺失代码是什么? -
@DuncG 我用 Producer 和 Consumer 类更新了内容
标签: java multithreading loops producer-consumer