java多线程异步执⾏
import urrent.Callable;
import urrent.ExecutionException;
import urrent.ExecutorService;
import urrent.Executors;
import urrent.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提供四种线程池,分别为:
java线程池创建的四种newCachedThreadPool创建⼀个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若⽆可回收,则新建线程。
newFixedThreadPool 创建⼀个定长线程池,可控制线程最⼤并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建⼀个定长线程池,⽀持定时及周期性任务执⾏。
newSingleThreadExecutor 创建⼀个单线程化的线程池,它只会⽤唯⼀的⼯作线程来执⾏任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执⾏。*/        ExecutorService es = wCachedThreadPool();
//记得要⽤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;
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。