java - 使用 for 循环创建和命名多个并发线程

标签 java multithreading

有没有办法创建与 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/

相关文章:

java - 将ArrayList的内容放入PriorityQueue Java问题

Java、EJB、所有方法的并发锁

java - JPA/Hibernate 实体类和同步的最佳实践是什么?

objective-c - 从在后台线程上执行的其他方法内部在主线程上执行方法?

Java定时器与GUI同步

java - java getter 是线程安全的吗?

java - 为什么我的网页在 Spring WebFlow 重定向后过期了?

java - GWT 中的字符串格式化程序

java - 对糟糕的系统设计进行代码重构

c++ - _M_ 尝试实现多线程队列时出现 construct null not valid 错误