现在有这样一个需求,一个java程序不停的往一个文件里add数据,另一个java程序不停的从同一个文件里poll数据.相当于内存中的list.有什么好的实现方法,不管用io还是nio只要能实现就行.
这个需求有意思。如果是我来做,我会这么想。
首先这是经典的生产消费者问题,您完全可以找一篇文章来看看应该怎么处理。
假设(1) [b][color=red]A线程[/color][/b]忘里面写,[b][color=red]B线程[/color][/b]往外读。
假设(2) 共享文件叫common.
前提: 这个文件里面不能无限存数据,所以说数据必须被清除,或者保持一定量的数据。
假如说只要数据被读取过,就可以被清除,那么可以遵循下列原则:
(1) B线程只要找不到common文件,那么读取到的内容就是空,也就是说没有可读的数据。
(2).A找不到文件,就创建文件common.
(3).A在往里写数据之前,需要获取文件的lock 参见FileChannel 和FileLock。
(4).B在读取之前也来获取这个lock,只有获取了才能读取。
(5).B读取之后把这个文件清空或删除。