タグ

Javaとmtに関するkiyo_hikoのブックマーク (12)

  • スレッドの排他制御

    第7章 スレッドの排他制御 章ではスレッド間の共有リソースにアクセスするための排他制御について説明します。GCで利用するスレッドはオブジェクトを共有リソースとして扱いますので、排他制御が必要になる場面が多々あります。 7.1 排他制御とは メモリ領域を共有するスレッドでは、同じアドレスにあるデータを複数のスレッドが同時に読み書きできてしまいます。ほかのスレッドから割り込みで変更される可能性があるデータに対し、割り込みを想定していないコードを書いてしまった場合は、思わぬところでメモリ破壊が生じてしまい、原因が特定しづらいエラーが発生してしまうかもしれません。 このように単一のリソースに対して、複数のスレッドから同時に処理が実行されるとまずい部分をクリティカルセクションと呼びます。 クリティカルセクションを扱う処理では、スレッド単体でアトミックに一連の処理を実行し、割り込みがないようにほかの

    kiyo_hiko
    kiyo_hiko 2016/06/24
    難しい。つまりウェイトセットと条件キューは別の何かということかな
  • java.util.concurrent: Executor.java

  • タスクを並行で実行するために必要なこと 〜基礎編〜 - かとじゅんの技術日誌

    スレッドセーフの話も語ればキリがないのですが、そろそろ「タスクを並行に実行する」話題にいってみましょう。この手の記事は結構あるし、書籍の内容をまるまるというわけにいかないので、独断と偏見でポイントを絞って軽く解説する感じで書いてみます。とりあえず、ThreadクラスとExecutorクラスあたりから。 この書籍のP129あたりです。 Java並行処理プログラミング ―その「基盤」と「最新API」を究める― 作者: Brian Goetz,Joshua Bloch,Doug Lea出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/11/22メディア: 単行購入: 24人 クリック: 419回この商品を含むブログ (163件) を見る 並行処理のアプリケーションには、「良いスループット」と「良い応答性」の両方が必要と書かれています。スループットは、単位時間あたりの処理能力のこ

    タスクを並行で実行するために必要なこと 〜基礎編〜 - かとじゅんの技術日誌
    kiyo_hiko
    kiyo_hiko 2016/06/17
    JavaDocのイマイチわからなかった訳がわかった感じ
  • 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>を待ち、終わったら結果を受け取ると。
  • Concurrency Utilitiesの「再」まとめ - Java8対応版 - argius note

    以前、このような記事を書きました。 Concurrency Utilitiesを使った並列処理・マルチスレッドのおさらい (2013-12-26) 前回の内容は、Concurrency UtilitiesだけでなくJavaのマルチスレッドの話も一部含んでいましたが、今回は、Concurrency Utilitiesだけにフォーカスして、全体が分かるように整理してまとめ直しました。 目次 概要 準備 タスク・フレームワーク (Executor) 同期キュー シンクロナイザー 並行処理コレクション 時間単位 アトミック値型とアトミック操作 ロック・フレームワーク 概要 今回は、Concurrency UtilitiesのAPIをいくつかのグループに分類し、それぞれのグループの主要な機能を「広く浅く」紹介する、という形式でまとめています。 パッケージ単位で分け、それからjava.util.con

    Concurrency Utilitiesの「再」まとめ - Java8対応版 - argius note
  • 並行処理プログラミングを究めるシリーズの書 - かとじゅんの技術日誌

    並行処理プログラミングを究めるシリーズの書 とりあえず以下を読んでます。他に何かよいのがあれば教えてください。 Java言語仕様 第3版 (The Java Series) 作者: ジェームズゴスリン,ガイスティール,ビルジョイ,ギッラードブラーハ,James Gosling,Guy Steele,Bill Joy,Gilad Bracha,村上雅章出版社/メーカー: ピアソンエデュケーション発売日: 2006/12メディア: 単行購入: 1人 クリック: 108回この商品を含むブログ (42件) を見る The Java Language Specification The Java Language Specification - Threads and Locks Java並行処理プログラミング ―その「基盤」と「最新API」を究める― 作者: Brian Goetz,Joshua

    並行処理プログラミングを究めるシリーズの書 - かとじゅんの技術日誌
  • JDK 7のFork/Join Frameworkで遊ぶ - CLOVER🍀

    JDK 7のリリース前から気になっていた、Fork/Join Frameworkを触ってみました。かなり今更感があるのは、気にしない方向で…。 Fork/Join Frameworkって? 詳しくは、こちらへ。 http://itpro.nikkeibp.co.jp/article/COLUMN/20110527/360769/?ST=develop&P=1 要は、マルチコアを使い倒すための並列処理フレームワークです。対象にしているのは粒度の小さい(細粒度の)並列処理で、Java 5で導入されたExecutorを使ったフレームワークでは粒度が大きくなってしまうので向いていない…というお話だそうな。 とはいえ、たぶんFork/Join Frameworkは計算処理をメインの用途に想定していると思うので、IOを伴うような粒度の大きな処理はExecutorを使った方がいいのではないかと。 何を使

    JDK 7のFork/Join Frameworkで遊ぶ - CLOVER🍀
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
    kiyo_hiko
    kiyo_hiko 2014/05/07
    主にスレッドセーフに関する話
  • Amazon.co.jp: Java Concurrency in Practice (English Edition): Tim, Peierls, Goetz Brian, Bloch Joshua, Bowbeer Joseph, Lea Doug, Holmes David: Digital Ebook Purchas

  • プログラマメモ: Thread.yieldまた別の使い道

    Thread.yieldメソッドについての別の使い道についてのコメントをメールでいただきましたので、掲載します。 以前、 「ほとんどのプログラマによるThread.yieldの唯一の使い方は、テスト中にプログラムの平行性を意図的に増加させることです。」 「Effective Java」P.194 と書いたものについてへのコメントとなります。 引用は承諾済みです。 これ以外の理由として、スレッドが TSS で動作していた場合に、次のようなテクニックがあります。 synchronized ブロック内にいるときに TSS の時間切れで他のスレッドに CPU が渡されたとします。 CPU を渡されたスレッドがこの synchronized ブロックを待っていた場合、ブロックされているためせっかく割り当てられた CPU 時間をすべて synchronized ブロック待ちに使うことになります。 この

  • JavaのSwingでマルチスレッド開発―SwingWorker― - のらくら備忘録

    Javaでインタフェースを構築するに当たり,考慮しなけらばならないスレッド関係を調べてみた. SwingとAWTの違い ◆AWT(Abstract Window Toolkit)◆ OSのウィンドウシステムに準じたデザインになる ユーザインタフェースの概観 Javaの基盤(Java Foundation Classes) 【参考】◇Java Foundation Classes (JFC)◆Abstract Window Toolkit - Wikipedia ◇Swing(AWTを拡張したもの)◇ AWTより軽量 多くの便利で高度なコンポーネントが用意されている 手順は少し複雑 簡単にLook&Feelを切り替えることができる Javaプログラム上で描画されるので,より柔軟な設計が可能 シングルスレッドで実装されている 【参考】JFrameでウインドウを表示する - [Javaプログラミ

  • 1