应用程序中的线程用法

时间:2010-09-07 09:19:51

标签: java multithreading

可以告诉我在应用程序中可以使用多少个线程。我的意思是线程实现用法是否限制为任何固定数字?

我可以多次使用同一个线程吗?

例如:

public Thread td;
td = new Thread(this);
td.start();

我可以在不同的类或方法中使用同一个应用程序中的上述线程吗?

请帮忙。

5 个答案:

答案 0 :(得分:2)

线程实施用法是否限制为任何固定数字?
线程数没有固定数字,但仅限于分配给程序的堆大小。

我可以多次使用同一个帖子吗?
当然,可以使用相同的线程任意次。检查 java.util.concurrent.Executor 以使用线程池。

答案 1 :(得分:1)

您可能需要阅读有关线程的深入概念。它与可重复使用的块不相似。线程有许多问题需要解决,比如竞争条件。在使用它们之前,您需要真正了解自己在做什么。

答案 2 :(得分:0)

只能启动一次线程。要创建另一个线程,您需要创建另一个实例。

答案 3 :(得分:0)

JVM不强制执行最大线程数,但可能存在其他因素操作系统支持,可用资源等。检查以下类似行上的问题是否允许最大线程:

Java very limited on max number of threads?

关于你可以多次使用Thread, 你应该看看ThreadPoolExecutor汇集线程。

答案 4 :(得分:0)

OS和Java的线程实现中的线程限制可能会有所不同。在所有情况下,线程消耗内存只是为了维护,即使它们没有做任何事情,因为操作系统为每个实例分配堆栈。在32位Windows应用程序中,每个进程的最大线程数通常为2048,因为默认堆栈大小为1Mb,因此2 * 2048 = 2Gb。但是,Windows上的Java.exe堆栈大小为256Kb,因此可能会更高。

然而,通常不需要或不希望产生这么多线程。像Web服务器之类的东西可能会使用一个线程池,并在一次允许的最大线程数上放置合理的界限。

只有需要处理大量同步操作的应用程序(例如IRC服务器)才应考虑生成数千个线程,即使这样,我也会质疑这是不是一个好主意。通过负载平衡等,负载可以在几台PC上进行养殖,从维护的角度来看,这是一件好事。