、今後のご紹介
将来
、このようなデータベースクエリデータに対する解決策があるならば、我々はなど、ファイルをアップロードし、アクションを実行する前に、この方法は、10分を行い、呼び出し側は、10分待つ必要があります。
これに基づき、呼び出し側はまず、完全に非同期技術を詰まらないように、そしてあなたは、他のことをし続けることができ、アクション、帰りの航空券の未来を行うことができます。そして、アクションは将来の結果に基づいて得ることができます。
どのように未来を実現するためには、それを所有しますか?
コード例:
1つの パッケージcom.cy.java8。 2 3 インポートjava.util.concurrent.atomic.AtomicBoolean。 4 インポートjava.util.concurrent.atomic.AtomicReference。 5 6 パブリック クラスFutureInAction { 7 パブリック 静的 ボイドメイン(文字列[]引数)がスローInterruptedExceptionある{ 8 > -未来の<string>将来=呼び出し((){ 9 試み{ 10 のThread.sleep(10000 ;) 11 リターン私は「を「終了; 12 }キャッチ(InterruptedExceptionあるE){ 13 リターン "エラー" 。 14 } 15 }); 16 17 のSystem.out.println(future.get())。 18 のSystem.out.println(future.get())。 19 のSystem.out.println(future.get())。 20 // 行う他の事... 21 22 しばらく(!{future.isDone()) 23 のThread.sleep(10 )。 24 } 25 のSystem.out.println(future.get())。 26 } 27 28 / ** 29 *以前の方法をブロック 30 * 31である * @param 呼び出し可能な 32 * @param <T> 33である * @return 34がある * / 35 プライベート 静的 <T> Tブロック(呼び出し可能<T> 呼び出し可能){ 36 リターンcallable.action( ); 37 } 38は、 39 / ** 40 今後は非同期* 41である * 42れる * @param 呼び出し可能 43である * @param <T> 44れます *@return 45 * / 46 プライベート 静的 <T>将来<T>を呼び出す(呼び出し可能<T> 呼び出し可能){ 47 AtomicReference <T>結果= 新しい AtomicReference <> (); 48 AtomicBooleanは=終え、新しい AtomicBoolean(偽); 49 スレッドt = 新しいスレッド(() - > { 50 T値= callable.action(); 51 result.set(値); 52 finished.set(真); 53 })。 54 t.start(); 55 56 今後<T>将来= 新しい将来<T> (){ 57 @Override 58 公共Tのget(){ 59 リターンresult.get()。 60 } 61 62 @Override 63 公共 ブールisDone(){ 64 リターンfinished.get()。 65 } 66 }。 67 リターン未来。 68 } 69 70 プライベート インターフェイスの未来<T>{ 71 Tのget(); 72 73 ブールisDone()。 74 } 75 76 プライベート インターフェース呼び出し可能<T> { 77 Tアクション()。 78 } 79 }
コンソール印刷:
ヌル ヌル ヌル 私は完成しています
II。
----