如图所示,
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());
}
}
}
1.首先采用的线程池是每次加一个任务都会新建一个线程的线程池类型,它是导致后面runnables为0的原因之一
2.其次,你用invokeAll来执行任务列表,
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(2);
//throw new RuntimeException();
return "我在学习----" + i;
}
}
public class ThreadPoolDemo {
public static void main(String[] args) {
//开辟一个线程池
ExecutorService service = Executors.newFixedThreadPool(50);
// 准备一个线程就够了吧----带返回值的
List<Person> list = new ArrayList<>();
for (int i = 0; i <10000; i++) {
list.add(new Person());
}
for(int i=0;i<10000;i++){
try {
service.submit(list.get(i));
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("---------------------");
List<Runnable> runnables =null;
if(!service.isShutdown()){
runnables= service.shutdownNow();
}
Iterator<Runnable> iterator = runnables.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next().toString());
}
}
}