有没有办法创建与 for 循环同时运行的多个线程?考虑这个例子:
for(int i = 1; i<=36; i++) {
if(new Random().nextInt(2)==0){
ActionThread nr = new ActionThread();
}
}
我不希望线程在 if 语句完成后被终止。每个线程的结束是在 ActionThread 类本身中随机确定的。另外,如何自动命名线程?例如,第一个线程应命名为 nr1,第二个线程为 nr2,第三个线程为 nr3,依此类推,而不是 nr。
最佳答案
我假设 ActionThread
是您创建的一些扩展 Thread
的自定义类。
I don't want the threads to be killed after completion of the if statement.
他们不会的。但是,您似乎还没有开始它们。阅读Thread
的javadoc。阅读顶部的 Material ,然后查看 start()
和 run()
方法。
如果您不启动线程...则不会发生任何事情。
此外,如果您希望应用程序的其他部分能够在创建线程后对线程“执行操作”,则应将 nr
局部变量替换为以下数据结构:应用程序的其余部分可以访问;例如列表或数组。
(也可以通过ThreadGroup
树查找现有线程,但比较复杂。)
Also, how do I name the threads automatically?
调用Thread.setName()
,或将线程名称传递给(相关)Thread
构造函数。例如:
nr.setName("thr" + i);
或者您甚至可以让您的 ActionThread
在构造函数中设置自己的名称。
我还应该指出,创建 Thread
的子类通常被认为是一个坏主意。最好将线程逻辑放入自定义的 Runnable 类中,然后创建 Runnable 实例并将其作为 Thread 构造参数传递。像这样:
public class MyRunnable implements Runnable {
@Override
public void run() {
// thread logic goes here
}
}
Thread th = new Thread(new MyRunnable());
th.start();
如果要将参数传递给线程逻辑,请向可运行类添加带有一些参数的构造函数,并在实例化可运行时提供它们。
为什么要这样做?因为它允许您轻松更改代码以使用线程循环或执行器或类似的东西。
关于java - 使用 for 循环创建和命名多个并发线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30283365/