如图所示,
将一些线程加入线程池,为什么没有任务等待的打印队列,按理说入股返回值为NULL,则会报NPE呀
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.concurrent.*;
class Person implements Callable<String> {
@Override
public String call() throws Exception {
Random random = new Random();
int i = random.nextInt(10);
TimeUnit.SECONDS.sleep(1);
//throw new RuntimeException();
return "我在学习----" + i;
}
}
public class ThreadPoolDemo {
public static void main(String[] args) {
//开辟一个线程池
ExecutorService service = Executors.newCachedThreadPool();
// 准备一个线程就够了吧----带返回值的
List<Person> list = new ArrayList<>();
for (int i = 0; i < 100000; i++) {
list.add(new Person());
}
try {
List<Future<String>> futures1 = service.invokeAll(list);
//执行完在返回结果
for (Future<String> ff :
futures1) {
String s = ff.get();
// System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("---------------------");
List<Runnable> runnables =null;
if(!service.isTerminated()){
runnables= service.shutdownNow();
}
Iterator<Runnable> iterator = runnables.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next().toString());
}
}
}