package com.yuan.day1;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
* @author QLBF
* @version 1.0
* @date 2021/6/20 20:41
*/
//logback.xml规定c开头才输出
@Slf4j(topic = "c.Test")
public class test3 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 1. 使用 FutureTask 传入 Callable 接口方式创建
FutureTask<Integer> fask=new FutureTask<Integer>(()->{
log.debug("线程...");
Thread.sleep(2000);
return 100;
});
// 2. 传入 fask给Thread,Callable不能直接传给Thread
Thread t1=new Thread(fask,"t1");
t1.start();
// 3. 获取返回结果时
// 当主线程获取 t1 线程的返回值时, 需要等 2 秒,此时主线程进入阻塞状态
Integer i = fask.get();
//{}表示占位符号而已,{}逗号隔开可以多个
log.debug("{}",i); //c.Test [main] - 100
//log.debug(String.valueOf(i)); //c.Test [main] - 100
}
}
二、Feture使用
三、线程池的4种使用
可参考:https://smiletimli.blog.csdn.net/article/details/87893337
newSingleThreadPool和newFixThreadPool由于队列是无限大,容易造成请求积压,而newCachedThreadPool由于最大线程数是无限大,容易造成创建太多线程导致OOM。
其实summit还可以执行runnable接口。就是execute只能执行runnable接口