gpt4 book ai didi

Java多线程问题——消费者/生产者模式

转载 作者:行者123 更新时间:2023-11-30 04:18:31 26 4
gpt4 key购买 nike

已尝试解决此问题,但事实证明很困难。

我有两个线程,一个是生产者,另一个是消费者。全部在不同的类(class)。两个线程独立运行。制作人汇集了大约 8-12 个文件夹作为输入。然后,它同时翻译所有文件并将其放置在名为“readyToLoad”的共享文件夹中。一旦生产者线程完成,消费者线程现在进入“readyToLoad”文件夹并开始处理翻译后的文档。

现在的问题是,当使用者处理翻译后的文档时,它不允许制作者将更多翻译后的文件放入“readyToLoad”文件夹中。

我的问题是,如何防止消费者锁定“readyToLoad”文件夹?我该如何应对这种情况?

对长文本表示歉意,但我觉得这将有助于理解我遇到问题的地方。感谢大家的帮助。

更新:添加了消费者代码(在加载过程中执行加载并锁定文件的代码)

public class LoadManager {
protected static final Logger logger = KCLogger.getLogger();
ArrayList<Loader> threads = new ArrayList<Loader>();
KCBLConfig config;
private static final ExecutorService service = Executors.newFixedThreadPool(10);
public LoadManager(KCBLConfig config) {
this.config = config;
}

public void start() throws Exception {
logger.log(Level.INFO, "Starting loading threads.");
try {
TreeMap<String, ConnectionHandler> connectionHandlers = config.getConnectionHandlers();
Iterator i = connectionHandlers.keySet().iterator();
while (i.hasNext()) {

ConnectionHandler connectionHandler = connectionHandlers.get((String) i.next());

for (LoadFolder loadFolder : connectionHandler.getKcXMLFolders()) {
Loader loader = new Loader(loadFolder.getId(), loadFolder, config.getConnectionHandlers());
Thread loaderThread = new Thread(loader);
loaderThread.start();
//service.submit(loader);
// service.shutdown();
//service.awaitTermination(1, TimeUnit.MILLISECONDS);
threads.add(loader);
}
}
} catch (Exception e) {
logger.log(Level.SEVERE, "There was an error starting the loaders. Stopping all loader threads.", e);
this.stop();
throw e;
}
logger.log(Level.INFO, "All loader threads created. There are " + threads.size() + " loader threads");
}

最佳答案

Java 生产者/消费者习惯用法现在通常使用 BlockingDeque 来完成。

我将为生产者和消费者建立单独的文件夹。为什么要承担如此复杂的任务?

关于Java多线程问题——消费者/生产者模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com