タグ

futureとcallableに関するkiyo_hikoのブックマーク (2)

  • Java で簡単マルチスレッドプログラミング - にょきにょきブログ

    仕事でマルチスレッドを扱うようになったので備忘録として Executors 関連のメモを残しておく。 あるタスクを別スレッドで実行したい時、Executors クラスを使えば自前でスレッドの管理をすること無く簡単に並列処理を行えるようになる。 もちろん完全に簡単になったわけではなく、マルチスレッドプログラミングの困難さは健在だが、自前でスレッドの管理をしない分バグを仕込む可能性も減るだろう。 はじめに Executors はタスクと呼ばれる処理の最小単位を別スレッドで実行する仕組みである。マルチスレッドなのでシングルスレッドに比べると複雑性は若干上がるものの、通常のマルチスレッドプログラミングに比べれば少ない複雑性、高い安全性を備える。そして何より、パフォーマンスの向上が期待できる。 この仕組みはジョブキューモデルそのものである。ジョブはタスク、キューは後述する Executor に相当す

    Java で簡単マルチスレッドプログラミング - にょきにょきブログ
    kiyo_hiko
    kiyo_hiko 2016/06/17
    ExecutorServiceにThreadPoolを作ってCallable<T>を実装したTaskクラスをバシバシ突っ込んで行き、必要ならFuture<T>に落としてgetで回収したり、Executors.newFixedThreadPoolで同時実行数を制限したりな話。便利。
  • マルチスレッドプログラミングのFutureパターン – ザワプロ!

    マルチスレッドプログラミングのパターンの一つにFutureパターンというものがある。 これは、ある処理を別スレッドで非同期に実行させて、その結果を受けたいときに用いられるパターンである。 特徴的なのは、処理の実行担当者(JavaではExecutorServiceがそれにあたる)は、処理(JavaではCallable)が渡されると別スレッド上で処理を開始して、メインスレッドには即座にFutureオブジェクトを返すことである。 なぜこのオブジェクトがFutureと呼ばれるかというと、今現在はまだ結果を取得できないが、将来のある時点で取得することになるからである。 その後、Futureのget()メソッドを呼ぶと、メインスレッドはCallableの処理が終わるまでブロックされる。 そして別スレッドで処理が終わった時点で結果が取得できる。 プログラム例を以下に示す。 public static v

    kiyo_hiko
    kiyo_hiko 2016/06/17
    なるほど。親スレッドでExcecutorにCallable<T>を渡してsubmitするととりあえずFuture<T>を返し別スレッドを開始する。その間親では別処理とかできる。future.get()を呼ぶと親はCallable<T>を待ち、終わったら結果を受け取ると。
  • 1