我可以在不使用ExecutorService的情况下使用Callable线程吗?我们可以在没有ExecutorService的情况下使用Runnable实例和Thread子类,而且这段代码可以正常工作。但是这段代码可以保持一致性:
public class Application2 {
public static class WordLengthCallable implements Callable {
public static int count = 0;
private final int numberOfThread = count++;
public Integer call() throws InterruptedException {
int sum = 0;
for (int i = 0; i < 100000; i++) {
sum += i;
}
System.out.println(numberOfThread);
return numberOfThread;
}
}
public static void main(String[] args) throws InterruptedException {
WordLengthCallable wordLengthCallable1 = new WordLengthCallable();
WordLengthCallable wordLengthCallable2 = new WordLengthCallable();
WordLengthCallable wordLengthCallable3 = new WordLengthCallable();
WordLengthCallable wordLengthCallable4 = new WordLengthCallable();
wordLengthCallable1.call();
wordLengthCallable2.call();
wordLengthCallable3.call();
wordLengthCallable4.call();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.exit(0);
}
}
使用ExecutorService可以让代码仅使用少量线程,那我哪里出错了吗?
call()
方法?这样做会创建一个后台线程吗?这就像直接调用 Runnable 对象的run()
方法,而不是将其放入 Thread 中并在 Thread 上调用start()
。而且你为什么不想使用 ExecutorService? - Hovercraft Full Of Eels