请问Java中如何实现在两个线程同时读一个文件?

gxdf123 2011-01-21 09:05:54
请问Java中如何实现在两个线程同时读一个文件?有没有共享读之类的?
...全文
343 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈志凯 2011-01-25
  • 打赏
  • 举报
回复
建议房主用JMS·····
gxdf123 2011-01-25
  • 打赏
  • 举报
回复
7楼说的有道理,但是我的需求是一台机器将一组文件向多台机器发送,如果不并行发送那么就可能同时只有一个目标在接收,不符合“广播”的要求,若将文件读到内存中再向目标发送的话,如果文件较大好像又不合适,这种需求应该怎样处理呢?
  • 打赏
  • 举报
回复
磁盘只有 1 个磁头,因此磁盘 IO 操作的并发能力为 0,也就是说多线程进行 IO 操作的无法提升性能。

不要没事找事使用多个线程去读取文件,这样只会带来得不偿失的后果!
kbyst 2011-01-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gxdf123 的回复:]

代码如下:
FileInputStream inputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int size;
while ((size = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, size);
……
[/Quote]

那就这样


Public class Readfile implements Runnable{

public void run(){
FileInputStream inputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int size;
while ((size = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, size);
}
inputStream.close();
outputStream.close();
}

public satatic void main(String args []) throws InterruptedException{
Readfile rf = new Readfile();

Thread t1 = new Thread(rf);
Thread t2 = new Thread(rf);

t1.start();
t2.start();
}
}



就行了
qybao 2011-01-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gxdf123 的回复:]
代码如下:
FileInputStream inputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int size;
while ((size = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, size);
}
……
[/Quote]
如果只是读,应该没有什么冲突的,一个读,一个写,那才会造成问题
gxdf123 2011-01-21
  • 打赏
  • 举报
回复
代码如下:
FileInputStream inputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int size;
while ((size = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, size);
}
inputStream.close();
outputStream.close();

两个线程同时运行这段代码,读的是同一个文件,不加锁,我是担心会有冲突,若不会有冲突的话就放心了哈。
kbyst 2011-01-21
  • 打赏
  • 举报
回复
直接读呗

读文件的类如Readfile

Readfile rf = new Readfile();

Thread t1 = new Thread(rf);
Thread t2 = new Thread(rf);

t1.start();
t2.start();
liaojianbiao 2011-01-21
  • 打赏
  • 举报
回复
两个线程同时读一个文件应该不会有问题吧。。只要你不对文件加锁。线程是都可以访问读取的。就好比你等同时用不同工具打开一个文件一样。
gxdf123 2011-01-21
  • 打赏
  • 举报
回复
up.

23,406

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧