java单线程异步_Java 实现异步调用
首先 我遇到的問題是 接口調用時需要更新緩存 而更新緩存又是個說快不快的過程 所以打算做異步調用 返回我所需要的結果即可 ,至于緩存什么時候更新完 就不是我所需要關注的了
廢話不多說 上代碼
public class MyExecutor {
private ExecutorService executor = Executors.newCachedThreadPool() ;
public void fun() throws Exception {
executor.submit(new Runnable(){
@override
public void run() {
try {
//要執行的業務代碼,我們這里沒有寫方法,可以讓線程休息幾秒進行測試
Thread.sleep(10000);
System.out.print("睡夠啦~");
}catch(Exception e) {
throw new RuntimeException("報錯啦!!");
}
}
});
}
}
public class Demo{
public static void main(String[] args) {
MyExecutor? myExecutor = new MyExecutor();
try {
myExecutor.fun();
System.our.print("你先睡著,我先回家啦~");
}catch(Exception e) {
throw new RuntimeException("業務程序報錯啦!!");
}
}
}
好啦 代碼到此結束 (ps:純手打 若有錯 請見諒)
運行主方法
會先打印(你先睡著,我先回家啦~)
然后(睡夠啦~)
也就是說 在需要異步執行的方法未執行完畢時 主程序已經返回結果了? 不需要繼續等待 這樣可以保證程序先返回結果 再繼續執行不需要等待的繁瑣的任務? 當然也可以加一些方法去判斷異步方法是否執行完畢。
說一下Executors類
這個類是用來創建線程池的
有這么幾個方法
1、newFixedThreadPool() 創建固定大小的線程池 線程池的大小一旦達到最大值就會保持不變,如果某個線程因為執行異常而結束,那么線程池會補充一個新線程
2、newCachedThreadPool() 創建一個可緩存的線程池,如果線程池的大小超過了處理任務所需要的線程,那么就會回收部分空閑(60s不執行任務)的線程,當任務數量增加時,此線程池又可以智能的添加新線程來處理任務。此線程池不會對線程池大小做限制,線程池大小完全依賴于系統(JVM)能夠創建的最大線程大小
3、newSingleThreadExecutor() 創建一個單線程的線程池。這個線程池只有線程在工作,也就是相當于單線程串行執行所有任務。如果這個唯一的線程因為異常結束,那么會有一個新的線程來替代它。此線程池保證所有任務的執行順序按照任務的提交順序執行
4、newScheduledThreadPool() 創建一個大小無限的線程池,此線程池支持定時以及周期性執行任務的需求
5、newSingleThreadScheduledExecutor() 創建一個單線程的線程池。此線程池支持定時以及周期性執行任務的需求
---------------------
作者:LittleYoungMan
來源:CSDN
原文:https://blog.csdn.net/java_ying/article/details/79803470
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
總結
以上是生活随笔為你收集整理的java单线程异步_Java 实现异步调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pdf to word文件转换器,出自著
- 下一篇: Windows 应急响应篇(保姆级检查流