MyRunable类
package day01;
public class MyRunable implements Runnable{
@Override
public void run() {
for (int i=0;i<8;i++){
System.out.println(Thread.currentThread().getName()+"输出了"+i);
}
}
}
Mycallable类
package day01;
import java.util.concurrent.Callable;
public class MyCallable implements Callable<String> {
private int n;
public MyCallable(int n) {
this.n = n;
}
@Override
public String call() throws Exception {
int sum = 0;
for (int i = 0; i <= n; i++) {
sum += i;
}
return Thread.currentThread().getName() + "的执行结果是" + sum;
}
}
线程池
package day01;
import java.util.concurrent.*;
public class ThreadPoolDemo01 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//创建线程池对象
/*
* 1.正式员工
* 2.最大员工数
* 3.存活数值
* 4.存活单位
* 5.任务队列
* 6.线程工厂
* 7.抛出策略*/
ExecutorService pool = new ThreadPoolExecutor(3, 5, 5, TimeUnit.SECONDS,
new ArrayBlockingQueue<>(5), Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy());
// //Runable方法
// Runnable traget = new MyRunable();
// pool.execute(traget);
// pool.execute(traget);
// pool.execute(traget);
//Callable方法的结果用future来接
Future<String> f1=pool.submit(new MyCallable(20));
Future<String> f2=pool.submit(new MyCallable(20));
Future<String> f3=pool.submit(new MyCallable(20));
Future<String> f4=pool.submit(new MyCallable(20));
//
System.out.println(f1.get());
System.out.println(f2.get());
System.out.println(f3.get());
System.out.println(f4.get());
}
}
注释掉Runable方法后调用Callable方法的输出结果
pool-1-thread-1的执行结果是210
pool-1-thread-2的执行结果是210
pool-1-thread-3的执行结果是210
pool-1-thread-2的执行结果是210