在Java中存储多个线程

时间:2013-04-01 21:30:01

标签: java multithreading

假设我有一个实现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,]
}

2 个答案:

答案 0 :(得分:2)

您应该考虑使用ExecutorService。然后保留一系列工作类并将它们提交给要运行的服务。

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

这是good tutorial on the subject

答案 1 :(得分:0)

您可以创建实现Runnable的自定义类,然后编写这些自定义类的数组。

因此,例如,在您上面编写的代码中,您始终可以使用

LittleClass[] objs = new LittleClass[4];
for(int i = 0; i < objs.length; i++) {
   objs[i] = new LittleClass();
}