繁体   English   中英

JAVA-如何在NIO服务器中的多个线程之间共享对象(文件和数组列表)

[英]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

如何 append arraylist<object> 在 java 的文件中<div id="text_translate"><p>给定的 function 写入文件但再次调用它会覆盖文件中的先前列表 object 例如</p><p>如果数组列表索引 0 包含名称 - “aman”,我称之为 function 它将“aman”保存在文件中。 但是当索引 1 的名称为“lavesh”时,它会覆盖以前的数据</p><p>它在像“lavesh”这样的文件中,但我想要它像“aman lavesh”</p><pre class="lang-java prettyprint-override"> public void alter_file( ArrayList&lt;Flight_registrie&gt; x) { try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(" Flight Registrie.txt")); oos.writeObject(x); x.clear(); oos.close(); } catch (IOException e) { System.out.println("An I/O error occurs"); e.printStackTrace(); } }</pre><p> 没有错误,但我的方法可能是错误的</p></div></object>

[英]How to append arraylist<object > in a file in java

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在 Java 中的多个线程之间共享公共日志文件 当多个线程尝试append JAVA中使用NIO的内容时是否需要锁定文件? 如何使用NIO设计Java服务器? Java如何正确同步多个线程上的arraylist? 读取具有两个线程的文件时引发java.nio.BufferOverflowException 由多个并行线程NIO异步写入(追加)到文件 Java中的线程如何共享变量? 如何在EAR文件中的多个Web应用程序之间共享登录信息? java中多个线程如何共享同一个对象 如何 append arraylist<object> 在 java 的文件中<div id="text_translate"><p>给定的 function 写入文件但再次调用它会覆盖文件中的先前列表 object 例如</p><p>如果数组列表索引 0 包含名称 - “aman”,我称之为 function 它将“aman”保存在文件中。 但是当索引 1 的名称为“lavesh”时,它会覆盖以前的数据</p><p>它在像“lavesh”这样的文件中,但我想要它像“aman lavesh”</p><pre class="lang-java prettyprint-override"> public void alter_file( ArrayList&lt;Flight_registrie&gt; x) { try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(" Flight Registrie.txt")); oos.writeObject(x); x.clear(); oos.close(); } catch (IOException e) { System.out.println("An I/O error occurs"); e.printStackTrace(); } }</pre><p> 没有错误,但我的方法可能是错误的</p></div></object>
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM