gpt4 book ai didi

java - 如何使用 java 中的线程读取和写入文件?

转载 作者:行者123 更新时间:2023-11-30 06:36:34 25 4
gpt4 key购买 nike

我正在编写一个应用程序,我需要从单个文件中读取 block ,每个 block 大约为 512 字节。我还需要同时编写 block 。

我的想法之一是 BlockReader 实现 RunnableBlockWriter 实现 RunnableBlockManager 管理读取器和写入器。

我在发现的大多数示例中遇到的问题是锁定问题和潜在的死锁情况。有什么想法可以实现吗?

最佳答案

我会推荐这本书 java Concurrency in Practice ,在本例中为第 5.3 节(生产者-消费者模式)。

您的解决方案可能类似于:

BlockingQueue<Data> queue = 
new LinkedBlockingQueue<Data>(MAX_BLOCKS_IN_QUEUE_UNTIL_BLOCK );

for (int i=0; i < MAX_DATA_PRODUCERS; i++ ) {
new Thread( new DataProducer( queue ) ).start();
}

new Thread(DataWriter( queue )).start

显然 DataProducer 和 DataWriter 是可运行的。

 class DataProducer implements Runnable {
...
queue.put(data); // blocks if MAX_BLOCKS_IN_QUEUE_UNTIL_BLOCK
// are waiting to be written
// This prevents an OutOfMemoryException
...
}

class DataConsumer implements Runnable {
...
try {
while(true) {
writeData(queue.take()); // blocks until there is a block of data
}
} catch (InteruptedException e) {
Thread.currentThread().interrupt();
}
...
}

关于java - 如何使用 java 中的线程读取和写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4701691/

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