java thread线程异步_java多线程异步执行

本文演示了如何在Java中使用ExecutorService和Callable接口实现线程异步执行。通过创建一个可缓存的线程池,提交Callable任务并获取Future结果,确保主线程不被阻塞,同时展示了如何优雅地关闭线程池。
摘要由CSDN通过智能技术生成

importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.Future;public classTestMain {public static voidmain(String[] args) {//实现一个Callable接口

Callable c = new Callable() {

@Overridepublic Netty call() throwsException {//这里是你的业务逻辑处理//让当前线程阻塞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 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 classNetty {privateNetty(String name) {this.name =name;

}privateString name;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值