2011-07-13 41 views
1

我有很多的应用程序写入到我在java.I并发文件要进行此操作同时,也希望我的文件保存order.I有 线程1个从网站1线程安全

主题写作2,从网站2书写

线程从网站3

3写作,我想维持秩序。

我怎样才能做到这一点 感谢

+0

更具体一点:线程2不能写入文件而线程2没有写入? – PeterMmm

+0

3个线程同时写入我的文件。但我希望数据一致。来自网站1的数据在我的文件和网站2中分组在一起。 – constantlearner

+0

关于N个线程的N个文件是什么? – PeterMmm

回答

3

你可以使用普通的同步机制。创建包含对java.io.File对象的引用的文件存储库。它会暴露API,如getFile(String path)。要访问文件每次执行以下操作:

File file = FileRepository.getFile("foo.txt"); 
synchronized(file) { 
    // perform any manipulations. 
} 

同步访问文件的另一种方式是:

FileChannel.lock() 
+1

FileChannel.lock()用于线程互斥还是进程互斥?它是否适用于两者? – sarnold

4

使用Queue表示操作的文件,并确保你从拿按照适当的顺序排队(先进先出)。您可以将其视为producer consumer问题。您有多个线程抓取数据,而单个使用者将该数据写入磁盘。

+0

我如何维护内容的顺序? – constantlearner

+0

队列记录了它,它是一个有序的数据结构。使用Java队列(http://download.oracle.com/javase/6/docs/api/java/util/Queue.html)项目在最后添加并从头部移除,所以最早的项目首先被移除。因此,一个接一个地将其放入一个文件中,您将获得与物品到达相同的订单。 – Daniel

+0

是的,我认为这是他的问题:当t3在t1之前到达(t3在t1之前完成读取)时,应该将t3推回到队列中(如果队列是正确的答案)。 – PeterMmm