㈠ java中怎么用多个线程同时对一个文件读取,最终将文件内容保存到一个字节数组中去呢
多线程复读取文件在一块硬盘上没制用,瓶颈在硬盘I/O,而不在CPU和内存。读取文件时,CPU不用复杂的计算工作,只是数据传输而已,多线程反而造成磁头来回移动,效率不高。如果是两块以上的硬盘,可以用不同的线程访问不同的硬盘,效率比单线程要高 而且多线程操作同一文件除了效率还会有多线程问题,多个线程同时往数组里存数据还会有线程安全问题,如果不同步处理读取的文件就是错误的。 如果读取的话只能设置每个线程各自读取偏 移量 读取文件大小(比如大小是200K)。 2,启动5个线程,第一个线程读到40,第二个线程跳过40在读到80,总之得合理安排好各个线程读取的大小。这样才能不重复读取。大数据处理框架maprece原理和此类似
㈡ 多线程可以同时并行读写一个文件吗
可以同时调用操作系统API来读写文件,操作系统内核内部会自动进行同步。
㈢ java多线程同时读取一个文件,这个方法可行吗
不可行。多线程能够提高效率是因为现在的cpu普遍是多核cpu, 多条线程可以在版多个内核中权同时执行来提高计算效率。但是计算机磁盘的磁头只有一个,即使多条线程去读也并不能提高读取效率,反而因为多线程的上下文切换问题会耗时更久。
㈣ 使用多线程读取同一个文件并保存到map容器中。
抱歉 私信发不出去 读取时 这样while(str1>>str){ myMap1[str] = n;//会自动替换重复的值,不需要你查询} 查找 时 直接 return myMap1.find(str) != myMap1.end();
㈤ java中不同的线程可以同时操作一个文件吗
Java中不同的线程是可以同时操作一个文件的,只不过有时候因为进程执行的快慢,会出现数据读取不同步的问题,例子如下:
{publicvoidrun(){FileInputStreaminputStream=newFileInputStream(file);//读数据byte[]buffer=newbyte[1024];intsize;while((size=inputStream.read(buffer))>0){outputStream.write(buffer,0,size);//写数据}inputStream.close();//outputStream.close();}publicsataticvoidmain(Stringargs[])throwsInterruptedException{Readfilerf=newReadfile();Threadt1=newThread(rf);//开启一个线程Threadt2=newThread(rf);//开启第二个线程t1.start();t2.start();}}
㈥ 一个文件能同时被多个java线程读取吗
可以。但是由于机械磁盘只能同时一个线程访问,所以多线程的读取效率可能还不如单线程。
㈦ 多个线程同时读取一个配置文件,老出错怎么办
参考如下:using System.threading;Metux m=new Metux(); //假设你的操作XML文件的方法为UpdateXmlvoid UpdataXml() { m.WaitOne(); //当一个线程正在使用该方法的时候,锁定该方法,使其他线程处于等待状态//…对XML的操作m.ReleaseMetux(); //使用完了,释放锁,让其他线程继续使用} [code=C#]
㈧ 多线程读取同一个文件,怎样判断文件已经被读取完
你把原来程序中直接读的地方,改成调用上面的函数,由该函数统一读行。这样,不管是你有回 N 个线答程,还是一个线程,都不会发生读的行重复,或者读的行不完整的现象了。为了充分利用多线程读取,就需要把文件划分成多个区域,供每个线程读取。那么就需要有一个算法来计算出每个线程读取的开始位置和结束位置。那么首先根据配置的线程数和文件的总长度计,算出每个线程平均分配的读取长度。但是有一点,由于文件是纯文本文件,必须按行来处理,如果分割点在某一行中间,那么这一行数据就会被分成两部分,分别由两个线程同时处理,这种情况是不能出现的。所以各个区域的结束点上的字符必须是换行符。第一个区域的开始位置是0,结束位置首先设为(文件长度/线程数),如果结束点位置不是换行符,就只能加1,直到是换行符位置。如果多线程操作,那么需要保证多个线程操作同一个对象,此外请保证先有线程放进内容,其他线程才能拿出数据。
㈨ c#中,如何实现同时n个线程写或读同一个文件
封装一个静态类(Lock),定义两个锁(静态属性,实际上为信号量),分别为 写锁(_m_WriteLock) 和读锁(_m_ReadLock):public static ReaderWriterLock _m_ReadLock = new ReaderWriterLock(); public static ReaderWriterLock _m_WriteLock = new ReaderWriterLock();当线程写入时,同时锁住 读写锁:LjLock._m_WriteLock.AcquireWriterLock(10000);//写资源锁.数字为超时时间操作结束后 LjLock._m_WriteLock.ReleaseWriterLock();当读操作时只锁写操作:LjLock._m_ReadLock.AcquireReaderLock(10000);//读锁LjLock._m_ReadLock.ReleaseReaderLock();即可。记住:一定要在操作完后ReleaseReaderLock();或ReleaseWriterLock()进行释放。
未经允许不得转载:山九号 » 多线程读取同一个文件|java中怎么用多个线程同时对一个文件读取最终将文件内容保存到一个字节数组中去呢