import com.mryx.sms.utils.date.DateUtils;
import java.util.Date;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class FutureTest {
private static ThreadPoolExecutor main_executors =
new ThreadPoolExecutor(10, 10, 0,
TimeUnit.SECONDS, new LinkedBlockingQueue<>(), new ThreadPoolExecutor.CallerRunsPolicy());
private static ThreadPoolExecutor adapter_executors =
new ThreadPoolExecutor(2, 2, 0,
TimeUnit.SECONDS, new LinkedBlockingQueue<>(1), new ThreadPoolExecutor.CallerRunsPolicy());
// private static ThreadPoolExecutor adapter_executors =
// new ThreadPoolExecutor(2, 2, 0,
// TimeUnit.SECONDS, new LinkedBlockingQueue<>(1), new ThreadPoolExecutor.CallerRunsPolicy());
static {
main_executors.prestartAllCoreThreads();
adapter_executors.prestartAllCoreThreads();
}
public static void main(String[] args) throws InterruptedException {
CompletableFuture.runAsync(() -> {
//提交,未占满
System.err.println(DateUtils.date2String(new Date()) + "-------" + "提交任务1");
CompletableFuture.runAsync(() -> {
try {
System.err.println(DateUtils.date2String(new Date()) + "-------" + "任务1开始执行,线程:" + Thread.currentThread().getName());
TimeUnit.SECONDS.sleep(5);
System.err.println(DateUtils.date2String(new Date()) + "-------" + "任务1执行完成...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}, adapter_executors);
}, main_executors);
TimeUnit.MILLISECONDS.sleep(100);
//提交,占满
CompletableFuture.runAsync(() -> {
System.err.println(DateUtils.date2String(new Date()) + "-------" + "提交任务2");
CompletableFuture.runAsync(() -> {
try {
System.err.println(DateUtils.date2String(new Date()) + "-------" + "任务2开始执行,线程:" + Thread.currentThread().getName());
TimeUnit.SECONDS.sleep(10);
System.err.println(DateUtils.date2String(new Date()) + "-------" + "任务2执行完成...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}, adapter_executors);
}, main_executors);
TimeUnit.MILLISECONDS.sleep(100);
//提交,占满,进入队列
CompletableFuture.runAsync(() -> {
System.err.println(DateUtils.date2String(new Date()) + "-------" + "提交任务3");
CompletableFuture.runAsync(() -> {
try {
System.err.println(DateUtils.date2String(new Date()) + "-------" + "任务3开始执行,线程:" + Thread.currentThread().getName());
TimeUnit.SECONDS.sleep(3);
System.err.println(DateUtils.date2String(new Date()) + "-------" + "任务3执行完成...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}, adapter_executors);
}, main_executors);
TimeUnit.MILLISECONDS.sleep(100);
//提交,占满,执行拒绝策略
CompletableFuture.runAsync(() -> {
System.err.println(DateUtils.date2String(new Date()) + "-------" + "提交任务4");
CompletableFuture.runAsync(() -> {
try {
System.err.println(DateUtils.date2String(new Date()) + "-------" + "任务4开始执行,线程:" + Thread.currentThread().getName());
TimeUnit.SECONDS.sleep(3);
System.err.println(DateUtils.date2String(new Date()) + "-------" + "任务4执行完成...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}, adapter_executors);
}, main_executors);
}
}