我有很多的应用程序写入到我在java.I并发文件要进行此操作同时,也希望我的文件保存order.I有 线程1个从网站1线程安全
主题写作2,从网站2书写
线程从网站3
3写作,我想维持秩序。
我怎样才能做到这一点 感谢
我有很多的应用程序写入到我在java.I并发文件要进行此操作同时,也希望我的文件保存order.I有 线程1个从网站1线程安全
主题写作2,从网站2书写
线程从网站3
3写作,我想维持秩序。
我怎样才能做到这一点 感谢
你可以使用普通的同步机制。创建包含对java.io.File对象的引用的文件存储库。它会暴露API,如getFile(String path)。要访问文件每次执行以下操作:
File file = FileRepository.getFile("foo.txt");
synchronized(file) {
// perform any manipulations.
}
同步访问文件的另一种方式是:
FileChannel.lock()
FileChannel.lock()用于线程互斥还是进程互斥?它是否适用于两者? – sarnold
使用Queue表示操作的文件,并确保你从拿按照适当的顺序排队(先进先出)。您可以将其视为producer consumer问题。您有多个线程抓取数据,而单个使用者将该数据写入磁盘。
我如何维护内容的顺序? – constantlearner
队列记录了它,它是一个有序的数据结构。使用Java队列(http://download.oracle.com/javase/6/docs/api/java/util/Queue.html)项目在最后添加并从头部移除,所以最早的项目首先被移除。因此,一个接一个地将其放入一个文件中,您将获得与物品到达相同的订单。 – Daniel
是的,我认为这是他的问题:当t3在t1之前到达(t3在t1之前完成读取)时,应该将t3推回到队列中(如果队列是正确的答案)。 – PeterMmm
更具体一点:线程2不能写入文件而线程2没有写入? – PeterMmm
3个线程同时写入我的文件。但我希望数据一致。来自网站1的数据在我的文件和网站2中分组在一起。 – constantlearner
关于N个线程的N个文件是什么? – PeterMmm