在java中,我们该怎么做:
创建的线程数将超过40.如果线程不受影响,如何转储线程。
提前致谢。
答案 0 :(得分:3)
从您的描述中,最简单的解决方案是让线程保存其结果,并让另一个线程按照您预期的顺序编写它们。 e.g。
int threads = Runtime.getRuntime().availableProcessors();
ExecutorServer es = Executors.newFixedThreadPool(threads);
List<Future<String>> results = new ArrayList<>();
for (int i = 0; i < tasks; i++)
results.add(es.submit(new Callable<String>() {
public String call() {
// task which returns a String
}
});
try (PrintWriter fw = new PrintWriter("output.txt")) {
for (Future f : results)
fw.println(f.get());
}
如你所见
答案 1 :(得分:0)
好吧,线程实际上没有订单,所以你需要以编程方式为它们创建某种池队列。
虽然我不知道Java 1.7是否通过其java.concurrent Classes添加了新东西..这可能会帮助你实现你想要的东西。
但是对于Java 1.6及更低版本,您必须有一个Queue来逐个管理线程,以维护JVM不会执行的实际顺序。