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

gxdf123 2011-01-21 09:05:54
请问Java中如何实现在两个线程同时读一个文件?有没有共享读之类的?
...全文
354 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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.
内容概要:本文详细介绍了Anaconda的下载、安装与配置方法(2025最新版)。Anaconda是一个开源的Python/R数据科学集成开发平台,预装了1500多个科学计算库,并提供conda包管理和环境管理功能。文章首先列出了系统要求,接着分别讲述了适用于不同操作系统的下载方式,包括官方下载和国内镜像下载。然后,具体讲解了Windows、macOS和Linux三种操作系统的安装步骤,以及环境变量的手动配置方法。此外,还提供了验证安装是否成功的命令和配置国内镜像源的方法,以提高下载速度。最后,列出了一些常用conda命令和常见问题的解决方案。 适合人群:从事数据科学、机器学习领域的研究人员和开发者,特别是需要频繁使用Python科学计算库的用户。 使用场景及目标:①帮助用户快速搭建Python开发环境,尤其是需要多个Python版本共存或隔离环境的情况下;②解决因网络原因导致的下载速度慢的问题;③提供详细的安装指南,确保安装过程顺利进行;④指导用户正确配置环境变量,避免常见的安装后无法使用的错误。 阅建议:由于Anaconda涉及多平台安装和配置,建议者根据自己的操作系统选择相应的章节重点阅,并严格按照步骤操作。对于初次使用者,建议先从简单的安装入手,再逐步学习环境管理和包管理的相关命令。

23,409

社区成员

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

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