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

I'm writing an application where I need to read blocks in from a single file, each block is roughly 512 bytes. I am also needing to write blocks simultaneously.

One of the ideas I had was BlockReader implements Runnable and BlockWriter implements Runnable and BlockManager manages both the reader and writer.

The problem that I am seeing with most examples that I have found was locking problems and potential deadlock situations. Any ideas how to implement this?

解决方案

I would recommend the book java Concurrency in Practice, in this case section 5.3 (Producer-consumer pattern).

your solution could look something like:

BlockingQueue queue =

new LinkedBlockingQueue(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

Obviously DataProducer and DataWriter are runnables.

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();

}

...

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值