我对java中的线程有一些经验,但我想知道......
存储多个线程的最佳做法是什么,我可以单独或作为一组来访问它们?
我自己的解决方案是创建一个threadArray
类,但自然我更喜欢一个更可靠的本地类。
提前致谢!
修改
显然,功能对于最佳方法非常重要。好吧,我举个例子:
我有一个应用程序,基本上同时搜索大量信息,因此我使用线程。但是每个线程只需要执行整个操作的一部分,所以我希望添加其他参数来指定范围。
当线程完成特定搜索时,它可以自然停止。但是当线程找到结果时,我希望停止所有线程并检索该结果。
这有帮助吗?
答案 0 :(得分:3)
我使用ExecutorService
将我的线程作为一个池进行管理,并以{{1}的某种形式将Future
添加到池中时放入Threads
。 }}。
通过这种方式,您可以通过Executor将所有线程作为一个单元进行管理,并通过Collection
跟踪各个线程。
编辑以回应您的
您可以使用Future
的{{1}}方法中止所有正在运行的线程。
示例(不是您的问题的解决方案,但涵盖了使用执行程序的大部分好处):
shutdownNow
答案 1 :(得分:1)
我只使用线程池,更具体地说是thread pool executor。这将维护一个线程缓存供您使用,尽管您将无法按需访问特定线程。
答案 2 :(得分:0)
我经常只将Thread
引用放在标准容器中。
容器的选择取决于你想要对象做什么。
答案 3 :(得分:0)
同步你的写作,你很好。除非你做一些特别的或不寻常的事情,否则没有更多的东西。你可以通过修改你的代码只允许一个线程一次写入,或者你只需要一个线程来完成所有的写作。
如果您通过多次写入访问覆盖基础,“本机”类将无法为您提供更高的可靠性。
我不确定this trail的年龄,但涵盖了基本同步,多线程访问以及其他一些内容。
答案 4 :(得分:0)
为什么不使用Java的Collection Framework?
我使用Map
存储线程,目的是为了在线游戏,所以我将对客户端线程的引用存储在地图中,其中字符名称(唯一的)作为线程的关键。
只需选择最适合您需求的系列。
除此之外,您还可以使用Collections
类中的方法根据需要创建集合的同步版本。