您如何从 java 中的所有线程收集数据?
How do you collect data from all your threads in java?
所以我做了一个扩展 Thread
class 的 class
并且我有一个调用 start()
的主 class。
我以这种方式为 运行 我的程序创建了 1000 个线程:
int ThreadNum = 1000;
for(int i=0; i<ThreadNum; i++){
Thread_Class function = new Thread_Class();// The Thread_Class is the one that extends the Thread class.
function.start(); }
这会生成 1000 个线程吗?我如何从所有线程收集数据?
非常感谢!!我都很感激!
在你的问题中构建线程的方式很好,但是你正在为循环中的每个迭代旋转一个新的 Thread
这是一个非常糟糕的主意。
构建新线程是一件代价高昂的事情,您必须避免这样做。为了缓解这个问题,制作了 ThreadPool
其中包含 Thread
s.
您已成功创建 Thread
s,但它不会 return 值。请注意,start 方法只负责启动线程。您可以在工作时 wait/interrupt 生成的线程。无法 returning 对象。
来自 Runnable
、
的文档
A Runnable, however, does not return a result and cannot throw a
checked exception.
是的,class Thread implements Runnable
。您已经创建了 类 extending Thread
的对象。所以行为对你来说是一样的。
替代方法是继续 Callable
,如@Ravindra 所回答。
来自 Callable
的文档
A task that returns a result and may throw an exception.
这正是您所需要的。
PS:另外,请注意 future.get()
是一个阻塞调用。并且始终建议将其与超时一起使用。
所以我做了一个扩展 Thread
class 的 class
并且我有一个调用 start()
的主 class。
我以这种方式为 运行 我的程序创建了 1000 个线程:
int ThreadNum = 1000;
for(int i=0; i<ThreadNum; i++){
Thread_Class function = new Thread_Class();// The Thread_Class is the one that extends the Thread class.
function.start(); }
这会生成 1000 个线程吗?我如何从所有线程收集数据?
非常感谢!!我都很感激!
在你的问题中构建线程的方式很好,但是你正在为循环中的每个迭代旋转一个新的 Thread
这是一个非常糟糕的主意。
构建新线程是一件代价高昂的事情,您必须避免这样做。为了缓解这个问题,制作了 ThreadPool
其中包含 Thread
s.
您已成功创建 Thread
s,但它不会 return 值。请注意,start 方法只负责启动线程。您可以在工作时 wait/interrupt 生成的线程。无法 returning 对象。
来自 Runnable
、
A Runnable, however, does not return a result and cannot throw a checked exception.
是的,class Thread implements Runnable
。您已经创建了 类 extending Thread
的对象。所以行为对你来说是一样的。
替代方法是继续 Callable
,如@Ravindra 所回答。
来自 Callable
A task that returns a result and may throw an exception.
这正是您所需要的。
PS:另外,请注意 future.get()
是一个阻塞调用。并且始终建议将其与超时一起使用。