java,future
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
很多朋友都想知道java future是什麼,下面就一起來了解一下吧~
Future代表一個異步計算的結果,並且它提供一些方法來讓調用者檢測異步過程是否完成,或者取得異步計算的結果,或者取消正在執行的異步任務。
public class Test { private static ExecutorService executorService = Executors.newSingleThreadExecutor(); public static void main(String[]args){ System.out.println("hello world"); Future<Integer>future = calcute(9); while (!future.isDone()){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } finally { System.out.println("正在執行"); } } try { int result = future.get(); System.out.println("result = " + result); } catch (ExecutionException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } public static Future<Integer>calcute(Integer i) { return executorService.submit(() -> { Thread.sleep(1000); System.out.println("return future for " + i); return i *i; }); }}
一個簡單Future使用用例寫完,使用線程池+Callback+Future,完成了一個簡單的計算操作。
Future是一個接口,先看一下內部方法:
public interface Future<V> { boolean cancel(boolean var1); boolean isCancelled(); boolean isDone(); V get() throws ExecutionException, InterruptedException; V get(long var1, TimeUnit var3) throws ExecutionException, InterruptedException, TimeoutException;}
get()函數是返回計算結果,注意get會同步操作,沒有返回結果前,會阻塞線程。
get還有一個重載函數get(long var1, TimeUnit var3),第一個參數是時長,第二個是單位。
表示在多少時長內獲取結果,如果仍未返回,則拋出異常TimeoutException。
try{ int result2 = future2.get(1000, TimeUnit.MILLISECONDS);} catch(TimeoutException e) { e.printStackTrace();}
cancel(boolean) 表示是否取消該future,
不能在調用cancel(true)/cancel(false)後,調用get()函數,否則會拋出異常CancellationException
isCancelled()函數是判斷該future是否已取消
isDone()函數是判斷該future是否已完成
isDone()函數是實時狀態讀取,不會阻塞線程。
Callback
Callback 是一個接口,內部只有一個函數
@FunctionalInterfacepublic interface Callable<V> { V call() throws Exception;}
-
蘋果手機長圖怎麼截圖,蘋果手機截長圖的兩種方法
1、長截圖辦法一iOS13上新之後自帶的長截圖方法,是在我們瀏覽網頁的時候使用的。操作方法:上音量鍵+開關鍵一起按下,然後點開截好的圖片,選擇“整頁”截圖即可。2、長截圖方法二利用QQ實現長截圖。操作方法:首先就是需要我們打開QQ,然後試着上音量鍵+開關鍵一起按下...
-
省內移動數據流量是指什麼
省內移動數據流量是指你的SIM卡所屬省份的可用GPRS流量,如果出了你的卡所屬的省份,去別的省,那省內移動數據流量就不可以使用,只能使用全國通用流量。移動數據流量有省內流量和全國通用流量,國內流量和省內流量是有所區別的。首先優先度不同:正常情況下,如果用戶在自...
-
關於底噪的意思介紹
1、底噪亦稱背景噪聲,基本所有的好耳機都有底噪,耳機底噪一般都是因爲前端的問題,耳機的靈敏度越高對於底噪就越敏感,一些高靈敏度和低阻抗的耳機會把底噪放大,如果加大音量的情況下,底噪會更加的明顯。2、檢測MP3底噪,一般方法是在夜晚等比較安靜的環境中戴上耳機,播...
-
黑色背景拍照竅門詳解
1、調整拍攝角度,尋找背景:既然是拍攝黑背景,在拍攝前我們儘量選擇深色的背景,這樣也就更加容易達到效果。不過深色不一定要是純黑色,只要顏色較爲深沉,偏向暗色調的均可。拍攝前多多觀察,尋找不同的拍攝角度,以找到有反差的深色作爲背景。要多嘗試不同的角度,直至主體...