Java CompletableFuture

CompletableFuture とは Java8 で導入された Java の並行処理 API CompletableFuture は関数型プログラミングスタイルを使用した非同期処理とリアクティブ API が実行できる Future / CompletionStage を継承した便利クラス Reactive Programming と CompletableFuture Reactive Programming とは データをストリームとして認識 データを受け取るたびにプログラムが反応して処理を行うこと 必要なデータを自ら取得して処理をするスタイルではない データの生産側はデータの消費側がどういう処理をしているのか意識しない データの消費側の処理を待つ必要がなくなる→非同期 データを通知した後はすぐに別の次の処理を行うことができる→ノンブロッキング データの消費者の負荷状況に関わらず一方的にデータを通知し続ける状況への対応手段の提供→バックプレッシャー リアクティブシステムの性質 Reactive API のようなリアクティブシステムには以下4つの性質がある(Reactive manifesto) Responsive(即応性) 基本的に非同期 リクエストはすぐ呼び出され、データが利用可能な時に呼び出し側へレスポンスが返される Resilient(耐障害性) システムは例外やエラーなどの障害に直面しても即応性を保ち続ける 耐障害性は、レプリケーション・封じ込め・隔離・移譲によって実現される Elastic(弾力性) システムはワークロードが変動しても即応性を保ち続ける リアクティブシステムは入力の提供に割り当てるリソースを増加あるいは減少させることで入力量の変化に反応する これは、システムの中に競合する場所や中心的なボトルネックが存在しないように設計し、シャーディングしたりレプリケーションしたコンポーネント間に入力を分散させることを意味する Message Driven(メッセージ駆動) リアクティブシステムは非同期なメッセージパッシングによってコンポーネント間の境界を確立する これによって疎結合性・隔離性・位置透過性を保証するとともに、エラーをメッセージとして移譲する手段を確保する システム内にメッセージキューを作成して監視し、必要ならバックプレッシャーを適用することでフロー制御が可能になる CompletableFuture API CompletableFuture クラスのメソッドは三つのカテゴリに分けられる Factory メソッド 非同期計算を開始する Completion Stage メソッド 非同期計算を実現するために使用される 例外メソッド 例外を処理する supplyAsync() / thenAccept() supplyAsync() Factory メソッド 非同期計算を開始するために使用される。バックグラウンドのタスクをトリガーし、すぐに返す 二つのリアクティブシステムの性質を持つ Responsive....

January 8, 2023 · 2 min · Sayaka Nakagawa

Java Multi Thread Coding

はじめに Java のマルチスレッドや非同期処理、並列処理の仕様についてなんとなくの知識しか持っていなかったため調査した。概要や概念など簡単にまとめたものをメモとして残す。 Thread スレッドとは、プログラム内での実行スレッドのことです。Java仮想マシンでは、アプリケーションは並列に実行される複数のスレッドを使用することができます。 引用元:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Thread.html スレッドは、一つのまとまった処理を表す。 実行時に一つのスレッドのみを扱うことをシングルスレッドと呼ぶ。 スレッドが複数用意され、各スレッドが同時に並列処理が行われることをマルチスレッドと呼ぶ。 Thread の使い方 Thread クラスを継承する Runnable インターフェースを実装する Example: Runnable インターフェースを実装してみる 今回は使い方2である Runnable インターフェースを用いて実装した。コード量が多く、Service クラスや Domain クラスは省いているためこのまま実行はできないことに留意。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 public class ProductServiceUsingThread { private ProductInfoService productInfoService; private ReviewService reviewService; public ProductServiceUsingThread(ProductInfoService productInfoService, ReviewService reviewService) { this....

December 30, 2022 · 3 min · Sayaka Nakagawa