繁体   English   中英

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

[英]Java run multiple threads from for loop with different names

我试图在for循环中启动可变数量的线程,并想将线程命名为prime1,prime2,[...]。

PrimeFinderThread类是从Thread扩展的。

[...]

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

[...]

我收到错误消息:

作业的左侧必须是变量。

来自("prime" + i)

用不同的名称启动X线程的可能解决方案是什么?

请尝试以下操作:

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();
}

它通过setName -method设置名称,然后通过调用startstart每个线程。

但是,使PrimeFinderThread的构造PrimeFinderThread接受一个额外的参数(即name并调用超类构造函数可能更容易。

public PrimeFinderThread (String name, int lowerBoundary, int interval) {
    super(name); // instead of setName
    // Do the other stuff
}

IMO,一种更好的方法是扩展Thread类,而是提供Runnable ,最好提供某种ExecutorService检查例如Executors JavaDoc或Oracle网站上的并发跟踪

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

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

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

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

至于设置每个线程的名称,这取决于PrimeFinderThread类具有哪些构造函数。 您可以将线程名称传递给PrimeFinderThread的构造PrimeFinderThread ,然后从那里将其传递给Thread的构造函数。

例如:

public PrimeFinderThread (String name, int lowerBoundary, int interval)
{
    super (name);
    ...
}

在Java的左侧分配中,不能使用X指定其他参数。 要给线程命名,您可以从线程的子类或线程中调用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();
        }
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM