![](/img/trans.png)
[英]java : Create multiple threads with different names (without using for loop)
[英]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设置名称,然后通过调用start
来start
每个线程。
但是,使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.