gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:54:41 25 4
gpt4 key购买 nike

我使用 Rox Java NIO 教程来改编和创建多线程 TCP 服务器 (http://rox-xmlrpc.sourceforge.net/niotut/)。

但现在我迷路了,因为我需要找到一种方法来跨所有线程共享文件和内存中的数组列表。在每个线程中,我需要能够写入该全局文件和数组,从中读取以插入到表中,并从文件和数组中删除已处理的数据。

这可能吗?我该怎么做?如何保证同步?你能给我指一个教程或一个例子吗?

祝您新年快乐!

最佳答案

Java 集合在默认情况下是不同步的。 ArrayList documentation里面有个大大的通知(类描述中的粗体文本)达到那个效果。幸运的是,还有一种方法 Collections.synchronizedList()为您的 ArrayList 或任何其他将正确同步的 List 返回一个包装器,因此您不必自己做。

就访问共享包装器对象而言,您可以将引用传递给您的线程,或者让一个类对您正在共享的对象进行静态或单例(全局)访问。如果您有许多共享对象,第二个选项可能更好。

如果你想读写一个文件,你可以使用RandomAccessFile类(class)。在这里,同步会比较棘手,因为该类不是线程安全的。您可能希望将同步放入具有数组列表的静态/单例类中。这是一个关于同步文件访问的线程:Java: thread-safe RandomAccessFile .

出于您的目的,使用记录器可能更容易。这是一个本质上同步的对象。 java.util.logging package 提供了基本的日志记录 API .这是一个很好的日志记录教程:http://www.vogella.com/articles/Logging/article.html

关于JAVA - 如何在 NIO 服务器中跨多个线程共享一个对象(文件和数组列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com