Java使用不同的名称从for循环运行多个线程

Java使用不同的名称从for循环运行多个线程,java,multithreading,for-loop,Java,Multithreading,For Loop,我试图在for循环中启动数量可变的线程,并希望将这些线程命名为prime1、prime2、[…] PrimeFinderThread类从Thread扩展而来 [...] for (int i = 0; i <= numberThreads; i++) { PrimeFinderThread ("prime" + i) = new PrimeFinderThread (lowerBoundary, interval); } [...] […] 对于(

我试图在for循环中启动数量可变的线程,并希望将这些线程命名为prime1、prime2、[…]

PrimeFinderThread
类从Thread扩展而来

[...]

    for (int i = 0; i <= numberThreads; i++) {
         PrimeFinderThread ("prime" + i) = new PrimeFinderThread (lowerBoundary, interval); 
    }

[...]
[…]

对于(int i=0;i对于Java中的赋值,您不能在
=
运算符的左侧指定其他参数。因此
PrimeFinderThread(“prime”+i)
是无效的,并且将保持无效

相反,您应该简单地为构造函数定义一个附加参数,并使用
super
关键字construct将其传递给父类构造函数

您应该将创建的线程分配给某个变量

PrimeFinderThread[] threads = new PrimeFinderThread[numberThreads];
for (int i = 0; i < numberThreads; i++) {
    threads[i] = new PrimeFinderThread ("prime" + (i+1), lowerBoundary, interval); 
    threads[i].start();
}

对于Java中的赋值,您不能在
=
运算符的左侧指定其他参数。因此
PrimeFinderThread(“prime”+i)
是无效的,并且将保持无效

相反,您应该简单地为构造函数定义一个附加参数,并使用
super
关键字construct将其传递给父类构造函数

您应该将创建的线程分配给某个变量

PrimeFinderThread[] threads = new PrimeFinderThread[numberThreads];
for (int i = 0; i < numberThreads; i++) {
    threads[i] = new PrimeFinderThread ("prime" + (i+1), lowerBoundary, interval); 
    threads[i].start();
}
请尝试以下操作:

Thread[] threads = new PrimeFinderThread[numberThreads];
for (int i = 0; i < numberThreads; i++) {
    threads[i] = new PrimeFinderThread (lowerBoundary, interval);
    threads[i].setName("prime" + i);
    threads[i].start();
}
在我看来,更好的方法是不扩展
线程
类,而是提供一个
可运行的
,最好使用某种
执行器服务
——例如,从Oracle网站查看或。请尝试以下操作:

Thread[] threads = new PrimeFinderThread[numberThreads];
for (int i = 0; i < numberThreads; i++) {
    threads[i] = new PrimeFinderThread (lowerBoundary, interval);
    threads[i].setName("prime" + i);
    threads[i].start();
}

在我看来,更好的方法是不扩展
线程
类,而是提供一个
可运行的
,最好使用某种
执行器服务
——例如,从Oracle网站检查或。

在Java中,不能在左侧赋值中用X指定其他参数。 要给线程命名,可以从thread或thread的子类中调用super(threadName)。可以使用setName(“threadName”)

public class ThreadSubClass extends Thread{

    public ThreadSubClass(String threadName){
        super(threadName);
    }

    @Override
    public void run(){
        System.out.println("Entering : " + getName());
        //do Something
    }


    public static void main(String [] args){
        for(int i=0;i<5;i++){
            ThreadSubClass t = new ThreadSubClass("Prime"+i);
            t.start();
        }
    }

}
public类ThreadSubClass扩展线程{
公共ThreadSubClass(字符串threadName){
超级(线程名称);
}
@凌驾
公开募捐{
System.out.println(“输入:“+getName());
//做点什么
}
公共静态void main(字符串[]args){

对于(inti=0;i,您不能在Java的左侧赋值中用X指定其他参数。 要给线程命名,可以从thread或thread的子类中调用super(threadName)。可以使用setName(“threadName”)

public class ThreadSubClass extends Thread{

    public ThreadSubClass(String threadName){
        super(threadName);
    }

    @Override
    public void run(){
        System.out.println("Entering : " + getName());
        //do Something
    }


    public static void main(String [] args){
        for(int i=0;i<5;i++){
            ThreadSubClass t = new ThreadSubClass("Prime"+i);
            t.start();
        }
    }

}
public类ThreadSubClass扩展线程{
公共ThreadSubClass(字符串threadName){
超级(线程名称);
}
@凌驾
公开募捐{
System.out.println(“输入:“+getName());
//做点什么
}
公共静态void main(字符串[]args){

对于(int i=0;我认为这个解决方案更干净。我写了我自己的答案,但我更新了你的答案。你同意这些更改吗?@MaartenBodewes-owlstead更新看起来不错。谢谢你的提问。我认为这个解决方案更干净。我写了我自己的答案,但我更新了你的答案。你同意这些更改吗?@MaartenBodewes-owlstead-up日期看起来不错。谢谢您的提问。非常感谢这帮了大忙。请参阅《Oracle认证专业Java SE 7程序员考试1z0-804和1z0-805》一书中第464页的“可调用、执行者、执行者服务、线程池和未来”一章。这是一个关于执行者和线程池的好例子:非常感谢,这很有帮助。请参阅《Oracle认证专业Java SE 7程序员考试1z0-804和1z0-805》一书中第464页的“可调用、执行者、执行者服务、线程池和未来”一章。这是一个关于执行者和线程池的好例子。:)