future java
- IT科技
- 關注:8.62K次
<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;}
- 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/dianzi/6w543q.html