Java使用不同的名称从for循环运行多个线程
我试图在for循环中启动数量可变的线程,并希望将这些线程命名为prime1、prime2、[…]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); } [...] […] 对于(
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页的“可调用、执行者、执行者服务、线程池和未来”一章。这是一个关于执行者和线程池的好例子。:)