Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中存储多个线程_Java_Multithreading - Fatal编程技术网

在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
,但这不会节省太多。