在一个物理文件file上生成多个java.io.File实例,同时进行并发读操作,我做了个简单的实验,在读的情况下各个线程之间没有影响,但在多线程并发写的情况下,会是一个什么情况?
在java中像这种情况的文件操作,到底是一个什么样的原理和过程?急盼有人能给一个全面而具体的回答!!!!!!!!

解决方案 »

  1.   

    和你具体写操作的机制有关, 因这些线程的写操作是否是flush的而异.
      

  2.   

    我没有采用任何的缓冲机制,问题关键点在于文件底层都是通过文件指针去定位位置读写,那么在java层次上的调用是如何映射到底层上的操作的?在多线程的情况下,这后面是如何去处理的?
      

  3.   

    help!!!!!help!!!!!!!!!!!help!!!!!!!!!!!!!!!!!!11
      

  4.   

    一个Java程序的多线程之间可以共享数据。当线程以异步方式访问共享数据时,有时候是不安全的或者不和逻辑的。比如,同一时刻一个线程在读取数据,另外一个线程在处理数据,当处理数据的线程没有等到读取数据的线程读取完毕就去处理数据,必然得到错误的处理结果。这和我们前面提到的读取数据和处理数据并行多任务并不矛盾,这儿指的是处理数据的线程不能处理当前还没有读取结束的数据,但是可以处理其它的数据。
      

  5.   

    谢谢楼上各位!分不在多!交流才是最主要的嘛!
    讲一个实例探讨一下吧,如下
    我针对一个文件生成多个File实例,在此实例上对应打开多个IO读取对象,在多线程下,如果无序的去读取(不写),那么会不会有问题呢(我自己试了一下,各个对象之间的文件指针应该是互不影响)?
    这样说来并发读应该是没有任何问题的.
    其二:当多个线程并发写时,如果我能控制每个线程所处理的文件块不重叠(多个线程绝不会处理相同的文件字节),那么这个时候是否可以不需要同步了呢(oracle中数据也是存在文件中,它是怎么做的)?(允许脏读).
    我想这是不是涉及到文件读写底层上的一些原理?对这个我不太了解,是否有高人可以指点指点呢?
    朋友说一个文件只能有一个文件指针,但我试过了,不同的File类,可以有自己单独的文件指针,相互之间没干扰,可以分别定位正确的文件块.因此,很想彻底搞清这些关系!
    求助!!!!!!!!
      

  6.   

    有些意思!写文件再怎么这也是通过磁头去写,并发情况下,硬盘怎么去处理这个先后次序啊???还是通过阻塞机制?即只有当前一个线程写完后,才能处理下一个线程的写请求,这又如何和上层的java文件操作对应起来?