0

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

2 回答 2

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

这是关于这个主题的一个很好的教程

于 2013-04-01T21:34:07.990 回答
0

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

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

LittleClass[] objs = new LittleClass[4];
for(int i = 0; i < objs.length; i++) {
   objs[i] = new LittleClass();
}
于 2013-04-01T21:33:05.390 回答