【发布时间】:2017-03-27 18:09:52
【问题描述】:
我正在执行应用程序的负载测试并且有 5 个线程。我希望所有线程都随机运行,因此知道设备上的负载。假设所有线程运行的次数为5,那么所有线程应该成功运行5次而没有IllegalThreadStateException。 我知道多次启动一个线程是不正确的。那么如何通过使用 while 和 for 循环来实现这一点? 我已经编写了一个示例,但遇到了异常。
int count = 5;
for(int i = 0; i < count; i++){
System.out.println("Loop " + i);
try {
th.start();
th2.start();
smart.start();
fpthread.start();
idthread.start();
System.out.println("The count is " +count);
} catch (Exception e) {
e.printStackTrace();
}
}
edit 1:了解了ExecutorService框架和Threadpool的概念,并通过了它。使用ExecutorService是否可以实现上述场景?
Like..
1.创建一个 ExecutorService 实例,
2.固定线程池的数量,
3。创建一个列表对象,
4。使用迭代器检查下一个元素,
5。将线程添加到 List 对象并最终通过 ExecutorService 对象执行..
我的想法和过程正确吗?
** 如果提问的方式或程序有误,请纠正我而不是投反对票,因为我是新手..
【问题讨论】:
-
目前还不清楚你想在这里做什么。您是否要同时运行 5 种线程的 5 个实例,总共 25 个线程?
-
没有。如果我没有说清楚,我很抱歉。实际上,我正在开发一个具有 4 个模块(如打印机、指纹等)的设备。所以在每个线程中,我都有不同的逻辑方法。现在我想从 oncreate() 开始,以便所有测试都可以运行。这一次,它们运行良好。现在我想运行它们 5 次。如果我把它保持在一个循环中,那么我会得到 IllegalThreadStateException。所以寻找解决方案。任何解决方案都会有所帮助。
-
在不知道更多关于你在做什么的情况下,我唯一能建议的就是你也实例化循环内的线程。您只能启动给定线程实例一次,因此如果您想运行给定类型的线程 X 次,那么您需要创建它的 X 个实例并启动每个实例。
-
我读到了多线程,我知道 MT 中发生的异常。只是对启动所有线程并随机运行它们感到困惑。
-
“随机播放”是什么意思?是否要等到循环主体中启动的所有五个线程都完成后再开始下五个线程?
标签: java android multithreading illegalstateexception