版权声明:未经博主同意,禁止转载,联系方式qq2928013321 https://blog.csdn.net/weixin_42130471/article/details/82846729
无返回值:
package ThreadPool2;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class test {
public static void main(String[] args) {
//1、创建线程池
//创建一个线程池
// ExecutorService pool=Executors.newSingleThreadExecutor();
//创建固定个数的线程池
ExecutorService pool=Executors.newFixedThreadPool(10);
//创建不固定个数的线程池
// ExecutorService pool=Executors.newCachedThreadPool();
//2、使用线程池(完成大量没有返回值的Runnable命令)
for(int i=0;i<20;i++) {
int n=i;//1.7版本要final修饰,1.8不需要
Runnable r=new Runnable() {
public void run() {
System.out.println("线程创建"+n);
try {
Thread.currentThread().sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("线程结束"+n);
}
};
pool.execute(r);
}
//3、结束线程池
pool.shutdown();
}
}
有返回值:
package ThreadPool2;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class test2 {
public static void main(String[] args) throws InterruptedException, ExecutionException {
//1、创建线程池
//创建一个线程池
// ExecutorService pool=Executors.newSingleThreadExecutor();
//创建固定个数的线程池
// ExecutorService pool=Executors.newFixedThreadPool(10);
//创建不固定个数的线程池
ExecutorService pool=Executors.newCachedThreadPool();
//2、使用线程池(完成大量没有返回值的Runnable命令)
//需要60秒
// for(int i=0;i<20;i++) {
// Callable<Integer> task=new myCallable();
// Future<Integer> future=pool.submit(task);
// int result=future.get();
// System.out.println(result);
// }
//需要3秒
List<Future> list=new ArrayList<>();
for(int i=0;i<20;i++) {
Callable<Integer> task=new myCallable();
Future<Integer> future=pool.submit(task);
list.add(future);
}
for(Future f:list) {
System.out.println(f.get());
}
//3、结束线程池
pool.shutdown();
}
}
class myCallable implements Callable<Integer>{
@Override
public Integer call() throws Exception {
// TODO Auto-generated method stub
System.out.println("线程开始");
Thread.currentThread().sleep(3000);
System.out.println("线程结束");
return new Random().nextInt(10);
}
}