多个地方同时向一个文件读写的互斥问题解决方案

来源:互联网 发布:windows推送通知服务 编辑:程序博客网 时间:2024/05/20 06:25

场景:多个地方同时向一个文件读写据,如何保持操作互斥性,即一次只能一个操作(比如读或写)进行。

 

原文:http://blog.csdn.net/hbcui1984/archive/2006/12/12/1440226.aspx

 

我们希望在一个线程在操作某个文件的时候,其他线程不能对该文件进行读或写操作,要怎么才能实现呢?利用java提供的synchronized似乎无法完成,因为每个线程是在程序中动态抛出的.郁昧了一天之后,我终于找到了一个解决办法,就是利用java.nio包中的FileChannel对文件进行加锁.

 

具体实现方法如下:

1.写文件的线程

 

2.读文件的线程

 

3.分别启用两个线程

 

 

4.结果分析

以上程序在对一个文件执行写操作前,先对该文件加锁,这样其他线程就不能再对该文件操作,等该线程的写操作结束,释放资源,其他线程才可以继续对该文件执行相应的读写操作.

可是,郁昧的是,这段程序在windows下可以正确执行,在linux下却无效.根据<Thinking in Java>上的观点是:对独占锁或者共享锁的支持必须由底层的操作系统提供。

 

原创粉丝点击