[英]JAVA - How to share an object (file and arraylist) across multiple threads in an NIO server
我使用Rox Java NIO教程来适应和创建多线程TCP服务器( http://rox-xmlrpc.sourceforge.net/niotut/ )。
但是现在我迷路了,因为我需要找到一种在所有线程之间共享文件和内存数组列表的方法。 在每个线程中,我需要能够写入该全局文件和数组,可以读取该全局文件和数组以将其插入表中,并从文件和数组中删除处理后的数据。
这可能吗? 我该怎么做? 如何保证同步? 您能给我讲一个教程还是一个例子?
最好的问候,新年快乐!
默认情况下,Java集合不同步。 在ArrayList
文档中 (类说明中的粗体文本)有一个大的注意事项。 对您来说幸运的是,还有一个Collections.synchronizedList()
方法,它为ArrayList
或将正确同步的任何其他List
返回一个包装器,因此您不必自己进行此操作。
就访问共享包装对象而言,您可以传递对线程的引用,也可以具有对共享对象具有静态或单例(全局)访问权限的类。 如果您可以共享对象,则第二种选择可能更好。
如果要读取和写入文件,则可以使用RandomAccessFile
类。 在这里,同步将更加棘手,因为该类不是线程安全的。 您可能希望将同步放入具有数组列表的静态/单例类中。 这是同步文件访问的线程: Java:线程安全的RandomAccessFile 。
为了您的目的,使用记录器可能会更容易。 这是一个固有同步的对象。 java.util.logging package
提供了基本的日志记录API。 这是有关日志记录的很好的教程: http : //www.vogella.com/articles/Logging/article.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.