java多线程异步执行

时间:2022-08-29 18:37:13

 

 

import java.util.concurrent.Callable;  
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class TestMain {

public static void main(String[] args) {

//实现一个Callable接口
Callable<Netty> c = new Callable<Netty>() {
@Override
public Netty call() throws Exception {

//这里是你的业务逻辑处理

//让当前线程阻塞5秒看下效果
System.out.println("---sleep开始---");
Thread.sleep(
5000);
System.out.println(
"---sleep结束---");
return new Netty("张三");
}
};

System.out.println(
"---主线程不被阻塞,继续往下走---");

/*Java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
*/
ExecutorService es
= Executors.newCachedThreadPool();

//记得要用submit,执行Callable对象
Future<Netty> fn = es.submit(c);

//无限循环等待任务处理完毕 如果已经处理完毕 isDone返回true
while (!fn.isDone()) {
try {
//处理完毕后返回的结果
Netty nt = fn.get();
System.out.println(
"处理完毕后返回的结果:" + nt.name);
}
catch (InterruptedException e) {
e.printStackTrace();
}
catch (ExecutionException e) {
e.printStackTrace();
}
}

if (fn.isDone()) {
System.out.println(
"关闭");
es.shutdown();
}
System.out.println(
"全部运行结束");
}

static class Netty {
private Netty(String name) {
this.name = name;
}

private String name;
}

}