闲来无事,就把目前使用的几种线程方法,写一下。仅供参考
package com.pian.thread;
import com.sun.org.apache.xpath.internal.functions.FuncTrue;
import java.util.concurrent.*;
/**
* @Auther: Administrator
* @Date: 2020/2/14 0014 21:13
* @Description:
*/
public class CreateThreadDemo {
public static void main(String[] args) throws InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(5,Executors.defaultThreadFactory());
//方法一:无参,无返回
executorService.submit(()->{
System.out.println(Thread.currentThread().getName() + ":无参,无返回");
});
//方法一:无参,有返回
Future <String> future = executorService.submit(()->{
String ThreadName = Thread.currentThread().getName();
System.out.println(ThreadName + "执行allable 接口,获取返回值");
return ThreadName;
});
Thread.sleep(1000);
try {
System.out.println(future.get() + ":获取callable 接口,获取返回值");
} catch (ExecutionException e) {
e.printStackTrace();
}
Callable<String> callable = new Callable<String>() {
@Override
public String call() throws Exception {
String ThreadName = Thread.currentThread().getName();
System.out.println(ThreadName + ":执行callable 接口,获取返回值");
return ThreadName;
}
};
//方法三:Future模式,有返回
Future <String> future2 = executorService.submit(()->{
try {
String ret = callable.call();
System.out.println(Thread.currentThread().getName() + ":执行callable 接口获取callable中的值,获取返回值,无需等待" + ret);
return ret;
} catch (Exception e) {
e.printStackTrace();
}
return null;
});
//方法三:FutureTask,有返回
FutureTask<String> futureTask = new FutureTask<>(callable);
executorService.submit(futureTask);
Thread.sleep(1000);
try {
System.out.println(futureTask.get() + ":futureTask 接口,获取返回值");
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
个人比较喜欢,方法三,直接,获取callable中callable中的值,做业务逻辑处理