假设我有一个实现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,]
}
答案 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());
}
答案 1 :(得分:0)
您可以创建实现Runnable的自定义类,然后编写这些自定义类的数组。
因此,例如,在您上面编写的代码中,您始终可以使用
LittleClass[] objs = new LittleClass[4];
for(int i = 0; i < objs.length; i++) {
objs[i] = new LittleClass();
}