private static void extracted(int i) throws InterruptedException, ExecutionException {
ExecutorService pool = Executors.newWorkStealingPool();
Future<String> future = pool.submit(() -> {
if (i==1){
Thread.sleep(1000*20); // 模拟长时间任务
}
if (i==2){
Thread.sleep(1000); // 模拟短时间任务
}
System.err.println(i+"执行完了");
return "aaa";
});
try {
String result = future.get(10, TimeUnit.SECONDS); // 设置10秒超时
System.out.println("任务执行结果: " + result);
} catch (TimeoutException e) {
System.out.println("超时了小伙子");
System.out.println("执行线程的状态:" + future.isDone());
System.out.println("我要取消任务----"+i);
future.cancel(true); // 取消任务
System.out.println("再看执行线程的状态:" + future.isDone());
} catch (CancellationException e) {
System.out.println("任务被取消了");
} catch (ExecutionException e) {
System.out.println("任务执行出现异常: " + e.getCause());
} finally {
pool.shutdownNow(); // 关闭线程池
}
System.out.println("到主线程了");
}
例子
package com.zz.demo;
import java.io.IOException;
import java.util.concurrent.*;
public class aa {
public static void main(String[] args) throws InterruptedException, ExecutionException, IOException {
for (int i = 0; i < 5; i++) {
new Thread(new bb(i)).start();//多线程执行
}
}
private static void extracted(int i) throws InterruptedException, ExecutionException {
ExecutorService pool = Executors.newWorkStealingPool();
Future<String> future = pool.submit(() -> {
if (i==1){
Thread.sleep(1000*20);
}
if (i==2){
Thread.sleep(1000);
}
System.err.println(i+"执行完了");
return "aaa";
});
try {
future.get(10, TimeUnit.SECONDS);
} catch (TimeoutException e) {
e.printStackTrace();
System.out.println("超时了小伙子");
System.out.println("执行线程的状态:" + future.isDone());
System.out.println("我要杀死你----"+i);
future.cancel(true);
System.out.println("再看执行线程的状态:" + future.isDone());
}
future.get();
System.out.println("到主线程了");
}
static class bb implements Runnable{
private int i;
public bb(int i) {
this.i = i;
}
@Override
public void run() {
try {
// System.err.println("执行:"+this.i);
//20秒
extracted(i);
} catch (InterruptedException e) {
throw new RuntimeException(e);
} catch (ExecutionException e) {
throw new RuntimeException(e);
}
}
}
}