Java實現非同步呼叫
一、建立執行緒
@Test public void test0() throws Exception { System.out.println("main函式開始執行"); Thread thread=new Thread(new Runnable() { @Override public void run() { System.out.println("===task start==="); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("===task finish==="); } }); thread.start(); System.out.println("main函式執行結束"); }
二、Future
jdk8之前的實現方式,在JUC下增加了Future,從字面意思理解就是未來的意思,但使用起來卻著實有點雞肋,並不能實現真正意義上的非同步,獲取結果時需要阻塞執行緒,或者不斷輪詢。
@Test public void test1() throws Exception { System.out.println("main函式開始執行"); ExecutorService executor = Executors.newFixedThreadPool(1); Future<Integer> future = executor.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { System.out.println("===task start==="); Thread.sleep(5000); System.out.println("===task finish==="); return 3; } }); //這裡需要返回值時會阻塞主執行緒,如果不需要返回值使用是OK的。倒也還能接收 //Integer result=future.get(); System.out.println("main函式執行結束"); System.in.read(); }
三、CompletableFuture
使用原生的CompletableFuture實現非同步操作,加上對lambda的支援,可以說實現非同步任務已經發揮到了極致。
@Test public void test2() throws Exception { System.out.println("main函式開始執行"); ExecutorService executor = Executors.newFixedThreadPool(2); CompletableFuture<Integer> future = CompletableFuture.supplyAsync(new Supplier<Integer>() { @Override public Integer get() { System.out.println("===task start==="); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("===task finish==="); return 3; } }, executor); future.thenAccept(e -> System.out.println(e)); System.out.println("main函式執行結束"); }
四、Spring的Async註解
使用spring實現非同步需要開啟註解,可以使用xml方式或者java config的方式。
xml方式:
<task:annotation-driven executor="executor" />
<task:executor id="executor"
pool-size="2" 執行緒池的大小
queue-capacity="100" 排隊佇列長度
keep-alive="120" 執行緒保活時間(單位秒)
rejection-policy="CALLER_RUNS" 對拒絕的任務處理策略 />
java方式:
@EnableAsync
public class MyConfig {
@Bean
public TaskExecutor executor(){
ThreadPoolTaskExecutor executor=new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10); //核心執行緒數
executor.setMaxPoolSize(20); //最大執行緒數
executor.setQueueCapacity(1000); //佇列大小
executor.setKeepAliveSeconds(300); //執行緒最大空閒時間
executor.setThreadNamePrefix("fsx-Executor-"); //指定用於新建立的執行緒名稱的字首。
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
}
(1)@Async
@Test
public void test3() throws Exception {
System.out.println("main函式開始執行");
myService.longtime();
System.out.println("main函式執行結束");
}
@Async
public void longtime() {
System.out.println("我在執行一項耗時任務");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("完成");
}
(2)AsyncResult
如果需要返回值,耗時方法返回值用AsyncResult包裝。
@Test
public void test4() throws Exception {
System.out.println("main函式開始執行");
Future<Integer> future=myService.longtime2();
System.out.println("main函式執行結束");
System.out.println("非同步執行結果:"+future.get());
}
@Async
public Future<Integer> longtime2() {
System.out.println("我在執行一項耗時任務");
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("完成");
return new AsyncResult<>(3);
}
相關推薦
java實現非同步呼叫例項
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
 
Java 實現非同步呼叫
首先 我遇到的問題是 介面呼叫時需要更新快取 而更新快取又是個說快不快的過程 所以打算做非同步呼叫 返回我所需要的結果即可 ,至於快取什麼時候更新完 就不是我所需要關注的了廢話不多說 上程式碼public class MyExecutor { private Execu
Java實現非同步呼叫
一、建立執行緒
@Test
public void test0() throws Exception {
System.out.println("main函式開始執行");
Thread thread=new Thread(new Runnable() {
@Overr
教你如何用 Java 實現非同步呼叫
導讀
本教程教你如何使用Java實現非同步呼叫。
一、建立執行緒
@Test
Java多執行緒實現非同步呼叫
在JAVA平臺,實現非同步呼叫的角色有如下三個角色:呼叫者 提貨單 真實資料
一個呼叫者在呼叫耗時操作,不能立即返回資料時,先返回一個提貨單.然後在過一斷時間後憑提貨單來獲取真正的資料.
去蛋糕店買蛋糕,不需要等蛋糕做出來(假設現做要很長時間),只需要領個提貨單就可以了(去幹別的事情),等到蛋糕做好
從Java future 到 Guava ListenableFuture實現非同步呼叫
前言
隨著移動網際網路的蓬勃發展,手機App層出不窮,其業務也隨之變得錯綜複雜。針對於開發人員來說,可能之前的一個業務只需要調取一次第三方介面以獲取資料,而如今隨著需求的增加,該業務需調取多個不同的第三方介面。通常,我們處理方法是讓程式碼
Java多執行緒實現非同步呼叫的方法
一個呼叫者在呼叫耗時操作,不能立即返回資料時,先返回一個提貨單.然後在過一斷時間後憑提貨單來獲取真正的資料.
去蛋糕店買蛋糕,不需要等蛋糕做出來(假設現做要很長時間),只需要領個提貨單就可以了(去幹別的事情),等到蛋糕做好了,再拿提貨單取蛋糕就可以了。
?
1
Spring Boot2.0之@Async實現非同步呼叫
補充一個知識點:
lombok底層原理使用的是: 位元組碼技術ASM修改位元組碼檔案,生成比如類似於get() set( )方法
一定要在開發工具安裝 在編譯時候修改位元組碼檔案(底層使用位元組碼技術),線上環境使用編譯好的檔案
下面我們學習 Spring Boot 非同步呼
Spring Boot 基礎系列教程 | 第三十二篇:使用@Async實現非同步呼叫:自定義執行緒池
推薦 Spring Boot/Cloud 視訊:
在之前的Spring Boot基礎教程系列中,已經通過《Spring Boot中使用@Async實現非同步呼叫》一文介紹過如何使用@Async註解來實現非同步呼叫了。但是,對於這些非同步執行的控制是我們保障自身
Spring Boot中使用@Async實現非同步呼叫
一 點睛
1 什麼是“非同步呼叫”
“非同步呼叫”對應的是“同步呼叫”,同步呼叫指程式按照定義順序依次執行,每一行程式都必須等待上一行程式執行完成之後才能執行;非同步呼叫指程式在順序執行時,不等待非
springboot乾貨——(十六)使用@Async實現非同步呼叫
非同步呼叫針對的是同步呼叫,一般在程式碼中我們使用同步呼叫相對較多,即請求程式碼立即返回結果或者說執行程式碼,非同步呼叫則是指請求之後不會裡面返回結果或者是呼叫程式碼。
接下來我們用例項來看下什麼是同步呼叫:
新建一個springboot專案後建立對應的task類:
pa
Spring boot ApplicationEvent實現非同步呼叫
1.什麼是事件機制
事件機制在java的設計模式中也可以叫監聽器模式或者是觀察者模式。
當有事件發生時,通知關注次事件的物件傳送訊息,告訴它有一個事件發生了,那麼怎麼知道通知誰呢? 那必須要在對這個事件感興趣的物件中定義這個事件,一旦有事件發生了,對事件有興
使用 RabbitMQ 實現非同步呼叫
目錄
引言
啟動 RabbitMQ 伺服器
執行 rabbitmq 容器
RabbitMQ 控制檯
Exchange 和 Queue
開發服務端和客戶端
開發服務端
開發客戶端
Java Bean 型別傳輸
結語
Spring @Async實現非同步呼叫示例
什麼是“非同步呼叫”?
“非同步呼叫”對應的是“同步呼叫”,同步呼叫指程式按照定義順序依次執行,每一行程式都必須等待上一行程式執行完成之後才能執行;非同步呼叫指程式在順序執行時,不等待非同步呼叫的語句返回結果就執行後面的程式。
同步呼叫
下面通過一個簡單示例來直觀的理解什麼是同步呼叫:
c#使用委託實現非同步呼叫
非同步程式設計是受公共語言執行庫的許多領域(如遠端處理、ASP.NET 和 Windows 窗體)支援的功能。非同步程式設計是 .NET Framework 中的核心概念。使用 .NET 非同步程式設計,在程式繼續執行的同時對 .NET 類方法進行呼叫,直到進行指定的回撥為止
Spring Boot學習(十二)之Spring Boot使用@Async實現非同步呼叫
什麼是“非同步呼叫”?“非同步呼叫”對應的是“同步呼叫”,同步呼叫指程式按照定義順序依次執行,每一行程式都必須等待上一行程式執行完成之後才能執行;非同步呼叫指程式在順序執行時,不等待非同步呼叫的語句返回
Ajax+jQuery+bootstrap+Java實現非同步點贊功能,並限制點選次數
(下面截圖是自己專案的截圖)
當已經點贊後,滑鼠再經過時,就會顯示 "禁止的圖示" (相應的class 會變化)
cursor:not-allowed
在很多的網站上有很多不同的點贊,我不知道他們是怎麼實現的,下面我來分享一下我寫的點贊實現,共大家參考下,
這是我在一個專案抽取的程式碼
Spring Boot使用@Async實現非同步呼叫返回結果:使用Future以及定義超時
關於使用 @Async實現非同步呼叫的內容,也得到不少童鞋的反饋,其中問題比較多的就是關於返回 Future的使用方法以及對非同步執行的超時控制,所以這篇就來一起講講這兩個問題的處理。
如果您對於 @Async註解的使用還不瞭解的話,可以看看之前的文章,具體如下:
定
SpringBoot之——使用@Async實現非同步呼叫
一、什麼是“非同步呼叫”“非同步呼叫”對應的是“同步呼叫”,同步呼叫指程式按照定義順序依次執行,每一行程式都必須等待上一行程式執行完成之後才能執行;非同步呼叫指程式在順序執行時,不等待非同步呼叫的語句返回結果就執行後面的程式。二、同步呼叫下面通過一個簡單示例來直觀的理解什麼是
JAVA的非同步呼叫
前言:在實際的業務中總有這樣的場景,後臺執行的時間過長,前端需要立即返回結果,以取得良好的客戶體驗。那麼後臺的非同步呼叫改怎麼實現呢?
1、 使用callable介面,加執行緒池
2、 使用JAVA的回撥機制
3、 使用spring框架預設的非同步呼
java實現非同步呼叫例項
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Java 實現非同步呼叫
首先 我遇到的問題是 介面呼叫時需要更新快取 而更新快取又是個說快不快的過程 所以打算做非同步呼叫 返回我所需要的結果即可 ,至於快取什麼時候更新完 就不是我所需要關注的了廢話不多說 上程式碼public class MyExecutor { private Execu
Java實現非同步呼叫
一、建立執行緒 @Test public void test0() throws Exception { System.out.println("main函式開始執行"); Thread thread=new Thread(new Runnable() { @Overr
教你如何用 Java 實現非同步呼叫
導讀 本教程教你如何使用Java實現非同步呼叫。 一、建立執行緒 @Test
Java多執行緒實現非同步呼叫
在JAVA平臺,實現非同步呼叫的角色有如下三個角色:呼叫者 提貨單 真實資料 一個呼叫者在呼叫耗時操作,不能立即返回資料時,先返回一個提貨單.然後在過一斷時間後憑提貨單來獲取真正的資料. 去蛋糕店買蛋糕,不需要等蛋糕做出來(假設現做要很長時間),只需要領個提貨單就可以了(去幹別的事情),等到蛋糕做好
從Java future 到 Guava ListenableFuture實現非同步呼叫
前言 隨著移動網際網路的蓬勃發展,手機App層出不窮,其業務也隨之變得錯綜複雜。針對於開發人員來說,可能之前的一個業務只需要調取一次第三方介面以獲取資料,而如今隨著需求的增加,該業務需調取多個不同的第三方介面。通常,我們處理方法是讓程式碼
Java多執行緒實現非同步呼叫的方法
一個呼叫者在呼叫耗時操作,不能立即返回資料時,先返回一個提貨單.然後在過一斷時間後憑提貨單來獲取真正的資料. 去蛋糕店買蛋糕,不需要等蛋糕做出來(假設現做要很長時間),只需要領個提貨單就可以了(去幹別的事情),等到蛋糕做好了,再拿提貨單取蛋糕就可以了。 ? 1
Spring Boot2.0之@Async實現非同步呼叫
補充一個知識點: lombok底層原理使用的是: 位元組碼技術ASM修改位元組碼檔案,生成比如類似於get() set( )方法 一定要在開發工具安裝 在編譯時候修改位元組碼檔案(底層使用位元組碼技術),線上環境使用編譯好的檔案 下面我們學習 Spring Boot 非同步呼
Spring Boot 基礎系列教程 | 第三十二篇:使用@Async實現非同步呼叫:自定義執行緒池
推薦 Spring Boot/Cloud 視訊: 在之前的Spring Boot基礎教程系列中,已經通過《Spring Boot中使用@Async實現非同步呼叫》一文介紹過如何使用@Async註解來實現非同步呼叫了。但是,對於這些非同步執行的控制是我們保障自身
Spring Boot中使用@Async實現非同步呼叫
一 點睛 1 什麼是“非同步呼叫” “非同步呼叫”對應的是“同步呼叫”,同步呼叫指程式按照定義順序依次執行,每一行程式都必須等待上一行程式執行完成之後才能執行;非同步呼叫指程式在順序執行時,不等待非
springboot乾貨——(十六)使用@Async實現非同步呼叫
非同步呼叫針對的是同步呼叫,一般在程式碼中我們使用同步呼叫相對較多,即請求程式碼立即返回結果或者說執行程式碼,非同步呼叫則是指請求之後不會裡面返回結果或者是呼叫程式碼。 接下來我們用例項來看下什麼是同步呼叫: 新建一個springboot專案後建立對應的task類: pa
Spring boot ApplicationEvent實現非同步呼叫
1.什麼是事件機制 事件機制在java的設計模式中也可以叫監聽器模式或者是觀察者模式。 當有事件發生時,通知關注次事件的物件傳送訊息,告訴它有一個事件發生了,那麼怎麼知道通知誰呢? 那必須要在對這個事件感興趣的物件中定義這個事件,一旦有事件發生了,對事件有興
使用 RabbitMQ 實現非同步呼叫
目錄 引言 啟動 RabbitMQ 伺服器 執行 rabbitmq 容器 RabbitMQ 控制檯 Exchange 和 Queue 開發服務端和客戶端 開發服務端 開發客戶端 Java Bean 型別傳輸 結語
Spring @Async實現非同步呼叫示例
什麼是“非同步呼叫”? “非同步呼叫”對應的是“同步呼叫”,同步呼叫指程式按照定義順序依次執行,每一行程式都必須等待上一行程式執行完成之後才能執行;非同步呼叫指程式在順序執行時,不等待非同步呼叫的語句返回結果就執行後面的程式。 同步呼叫 下面通過一個簡單示例來直觀的理解什麼是同步呼叫:
c#使用委託實現非同步呼叫
非同步程式設計是受公共語言執行庫的許多領域(如遠端處理、ASP.NET 和 Windows 窗體)支援的功能。非同步程式設計是 .NET Framework 中的核心概念。使用 .NET 非同步程式設計,在程式繼續執行的同時對 .NET 類方法進行呼叫,直到進行指定的回撥為止
Spring Boot學習(十二)之Spring Boot使用@Async實現非同步呼叫
什麼是“非同步呼叫”?“非同步呼叫”對應的是“同步呼叫”,同步呼叫指程式按照定義順序依次執行,每一行程式都必須等待上一行程式執行完成之後才能執行;非同步呼叫指程式在順序執行時,不等待非同步呼叫的語句返回
Ajax+jQuery+bootstrap+Java實現非同步點贊功能,並限制點選次數
(下面截圖是自己專案的截圖) 當已經點贊後,滑鼠再經過時,就會顯示 "禁止的圖示" (相應的class 會變化) cursor:not-allowed 在很多的網站上有很多不同的點贊,我不知道他們是怎麼實現的,下面我來分享一下我寫的點贊實現,共大家參考下, 這是我在一個專案抽取的程式碼
Spring Boot使用@Async實現非同步呼叫返回結果:使用Future以及定義超時
關於使用 @Async實現非同步呼叫的內容,也得到不少童鞋的反饋,其中問題比較多的就是關於返回 Future的使用方法以及對非同步執行的超時控制,所以這篇就來一起講講這兩個問題的處理。 如果您對於 @Async註解的使用還不瞭解的話,可以看看之前的文章,具體如下: 定
SpringBoot之——使用@Async實現非同步呼叫
一、什麼是“非同步呼叫”“非同步呼叫”對應的是“同步呼叫”,同步呼叫指程式按照定義順序依次執行,每一行程式都必須等待上一行程式執行完成之後才能執行;非同步呼叫指程式在順序執行時,不等待非同步呼叫的語句返回結果就執行後面的程式。二、同步呼叫下面通過一個簡單示例來直觀的理解什麼是
JAVA的非同步呼叫
前言:在實際的業務中總有這樣的場景,後臺執行的時間過長,前端需要立即返回結果,以取得良好的客戶體驗。那麼後臺的非同步呼叫改怎麼實現呢? 1、 使用callable介面,加執行緒池 2、 使用JAVA的回撥機制 3、 使用spring框架預設的非同步呼