在Java中存储多个线程
假设我有一个实现在Java中存储多个线程,java,multithreading,Java,Multithreading,假设我有一个实现Runnable接口的类,我将在主程序中创建给定类的5个实例。我想将它们存储在数组或集合中。由于该类实现了Runnable,因此我的理解是,我只能将其存储在线程容器中,例如thread[]。但是,如果我这样做,我就不能使用被重写的类,例如toString()方法,或者任何其他自定义方法/字段 public class LittleClass implements Runnable{ public void run(){ } } public static vo
Runnable
接口的类,我将在主程序中创建给定类的5个实例。我想将它们存储在数组或集合中。由于该类实现了Runnable
,因此我的理解是,我只能将其存储在线程容器中,例如thread[]
。但是,如果我这样做,我就不能使用被重写的类,例如toString()
方法,或者任何其他自定义方法/字段
public class LittleClass implements Runnable{
public void run(){
}
}
public static void main(String[] args){
Thread[] smallClasses = new Thread[5];
// initialize and so...
smallClasses[i].customField//not accessible
System.out.println(smallClasses[i])//gives Thread[Thread-X,X,]
}
您可以创建实现Runnable的自定义类,然后编写这些自定义类的数组 例如,在上面编写的代码中,您可以始终使用
LittleClass[] objs = new LittleClass[4];
for(int i = 0; i < objs.length; i++) {
objs[i] = new LittleClass();
}
LittleClass[]objs=新的LittleClass[4];
for(int i=0;i > p>您应该考虑使用<代码> Excel服务> /COD>。然后保存一个作业类数组,并将它们提交给要运行的服务
// create a thread pool with as many workers as needed
ExecutorService threadPool = Executors.newCachedThreadPool();
// submit your jobs which should implements Runnable
for (YourRunnable job : jobs) {
threadPool.submit(job);
}
提交作业后,关闭服务,等待其完成,然后可以查询作业以从中获取信息
// shuts the pool down but the submitted jobs still run
threadPool.shutdown();
// wait for all of the jobs to finish
threadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
// now go back and print out your jobs
for (YourRunnable job : jobs) {
System.out.println(jobs.toString());
}
这里有一个。为什么你不能只存储小类的数组
?如果我这样做了,那么用线程t=new Thread(new LittleClass())创建一个新线程将无法存储在小类[]数组中,或者我遗漏了什么?:)@Potson先生:没有什么能阻止你先创建数组或LittleClass对象集合,然后在数组中迭代创建线程。但更重要的是,你错过了格雷的答案。你最好看看它和他的教程,因为这是最好的方法。当然,我会试试看,谢谢。怎么样?看起来很合理。好吧,我会取消我的否决票。但是你知道没有理由推荐他的类extend Thread,也有很多理由不这么做。我的意思是“实现可运行”,我对它进行了编辑以反映这一点。但是为什么要把它弄得这么复杂呢?@Andrey:因为这个实体就是为这种情况创建的。1+因为任何时候有线程数组的人都应该使用执行器服务
@Audrey。这就是他们的目的。始终为“不要使用线程
s使用执行器服务
”的+1。这里没有线程数组@Andrey。只是一个工作类数组。您可能会变得更复杂,并使用Future
,但这不会节省太多。