タグ

マルチスレッドに関するmoockmoockのブックマーク (6)

  • 稲員勇輝の覚書 2/27 スレッド

    Javaのコードを実行したときの処理の流れをスレッドと呼ぶ。 "シングルスレッド"とは、スレッドが一つしかない状態。 "マルチスレッド"とは、複数のスレッドが動いている状態。しかし、それは、一つ一つのスレッドを細切れにし一方のスレッドが停止している間に片方のスレッドを動かし、それを人間の感覚では認知できない速度で実行するため二つのスレッドが同時に動いているように見えるだけ。 スレッドを使うには以下の二種類の方法がある 1:Threadクラスを継承する 2:Runnableインターフェイスを実装する。 サーブレットの場合でもマルチスレッドが使われている。 以下の図のように、入力フォームから検索を行っている間も、ブラウザ内のサーブレットは動作し続けている。 【スレッドの状態遷移】 1:実行中(Running)…CPUが割り当てられて、実際に動作している状態 2:実行可能(Ready)…CPU

    稲員勇輝の覚書 2/27 スレッド
  • マルチスレッド

    <Read-Write Lock> (1)ReentrantReadWriteLock Read-Write Lockは「読む処理」と「書く処理」に分けてロックを取ります。 「読む処理」X「書く処理」または「書く処理」X「書く処理」の時にはロックをかけますが 「読む処理」X「読む処理」の時にはロックをかけません。 読み込み処理が多い時または読み込み処理に時間がかかる場合など、一般的な排他制御より効率が期待されます。 java.util.concurrent.locks.ReentrantReadWriteLockクラスを使えば、Read-Write Lockの機能が容易に実現できます。 Read-Write Lockのパターンは lock try { 処理 } finally { unlock } のようにfinally節で必ずロックを開放しなければいけません。 ●Read-Write L

  • Java Tips: かしこいロック

    単純なロックの問題点 Java にはマルチスレッドプログラミングにおける一般的な排他制御を記述するのに適した synchronized ブロック、synchronized メソッドという構文があり、保護したいデータにアクセスする全てのコードをこれらの構文を使って同期化すれば、排他制御は簡単に実現できる。しかし、この方法には問題もある。例えば電子掲示板システムのログデータにこの方法を適用することを考えてみよう。 電子掲示板に対するアクセスを全て同期化するということは、一度に一人のユーザしかログにアクセスできないということである。なんらかの理由(サーバ・クライアント間の回線速度やクライアントの処理速度の低下など)でログの読み込みに時間がかかっているユーザが一人れば、サーバ側の計算機資源にいくら余裕があっても、その間は他の大勢のユーザは掲示板にアクセスできない。すなわち計算機資源の利用効率が著し

  • Java Sample マルチスレッドサンプル

    マルチスレッドサンプル マルチスレッドプログラミングのサンプルです。 通常プログラムは上から下へ順々に実行されていきます。 マルチスレッドプログラムでは複数の処理(スレッド)を同時に実行する事ができます。 サンプルを実行すると単純に0〜9までの出力が順に2回行われず、 00112233・・・ のように混ざって出力されます。 これは java.lang.Thread#start() メソッドを呼び出すと、このメソッドが終了する前に次の処理を行うからです。 つまり ts1.start() が実行されている最中に ts2.start() が呼び出されているのです。 これによって2つの処理(スレッド)が同時に実行される事になります。 実装方法はマルチスレッドで動かしたいクラスがRunnableインターフェースを実装し、run() メソッドを実装します。 呼び出す時は java.

  • 『増補改訂版Java言語で学ぶデザインパターン入門マルチスレッド編』

    書は、マルチスレッドと並行処理を学ぶ入門書です。 書では、Javaのスレッドの基から書き起こし、 マルチスレッドプログラミングによく登場するパターンを解説します。 書を通して、マルチスレッドと並行処理に関する理解を深め、 よく使われる技法を身につけましょう。 Amazon 目次 想定読者 書の目次 サンプルプログラムのダウンロード 誤りと訂正 フィードバック 想定読者 書は、こんな方へおすすめです。 Javaのマルチスレッドプログラミングに興味を持っている人 Javaのスレッドについて、きちんと学びたい synchronizedって、どういうときに、なぜ書くのか、ちゃんと理解したい マルチスレッドプログラミングで何が問題になるのか、なぜ難しいかを把握したい スレッドの間で情報をやりとりする方法について学びたい スレッドを使ってパフォーマンスアップする方法について学びたい Swi

  • [実装編]スレッドセーフにすることを忘れてはいけない

    スレッドセーフとは,アプリケーションをマルチスレッドで動作させても問題がないことを指す。サーバー向けアプリケーションは,マルチスレッドで動作するように設計・実装することが望ましい。そのほうが通常はパフォーマンスが向上するからだ。 だが,マルチスレッドのアプリケーションは,注意深く設計・実装しないとトラブルが生じる。例えば,あるスレッドで保持していた変数の値がほかのスレッドからアクセスされ,処理結果が上書きされたり,ほかの利用者の情報が見えてしまったりする。 こうしたトラブルは,開発者が1人で単体テストしているときには見つけられず,多数の利用者で限界時の挙動テストをしたときや,番移行した後で,たまたま見つかることが多い。トラブルが発生するタイミングを再現することが難しいので,デバッグは困難になりがちだ。 マルチスレッドでのトラブルを防ぐため,開発者は,スレッドセーフな設計と実装を心がける必

    [実装編]スレッドセーフにすることを忘れてはいけない
  • 1