线程数组的最佳实践(java)

时间:2011-12-02 14:43:30

标签: java arrays multithreading

我对java中的线程有一些经验,但我想知道......

存储多个线程的最佳做法是什么,我可以单独或作为一组来访问它们?

我自己的解决方案是创建一个threadArray类,但自然我更喜欢一个更可靠的本地类。

提前致谢!


修改

显然,功能对于最佳方法非常重要。好吧,我举个例子:

我有一个应用程序,基本上同时搜索大量信息,因此我使用线程。但是每个线程只需要执行整个操作的一部分,所以我希望添加其他参数来指定范围。

当线程完成特定搜索时,它可以自然停止。但是当线程找到结果时,我希望停止所有线程并检索该结果。

这有帮助吗?

5 个答案:

答案 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类中的方法根据需要创建集合的同步版本。