タグ

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

  • InfoQ: JavaScriptへのマルチスレッド・プログラミングの導入

    function backgroundLoad ( ids ) { for ( var i=0; i < ids.length; i++ ) { var a = getArticleWithCache(ids[i]); backgroundLoad(a.children); } } このbackgroundLoadはIDの配列を引数に取り、その各IDに対して上で定義したgetArticleWithCacheを呼び出します。これでIDに対応する記事のデータがキャッシュされます。そして読み込んだ記事の子記事のIDに対してbackgroundLoadを再帰的に呼び出すことで、ツリー全体をキャッシュすることができます。 ここまですべてうまくいっているように見えます。しかし、一度でもAjax開発を経験したことのある方ならば、これではうまくいかないということはすでにおわかりだと思います。これまでの例で

    InfoQ: JavaScriptへのマルチスレッド・プログラミングの導入
  • JavaScriptによるマルチスレッドの実現‐Concurrent.Threadの裏側

    function f ( ) { do_something(); do_another(); do_one_more(); } このプログラムでは順番に3つの関数を呼び出していますが、各関数呼び出しの間でいったんスレッドの実行権を他のJavaScriptコードに渡したいとします。これは次のように、各関数呼び出しをそれぞれ別の関数に分けて、間にsetTimeoutを挿むようにプログラムを書き換えることで実現できます。 function f ( ) { do_something(); setTimeout(f1, 1);  // 1ミリ秒後にf1を呼び出す } function f1 ( ) { do_another(); setTimeout(f2, 1); } function f2 ( ) { do_one_more(); } こうして書き換えた関数fを、 f(); f(); のようにし

    JavaScriptによるマルチスレッドの実現‐Concurrent.Threadの裏側
  • Javaでマルチスレッドするときの注意をまとめてみた - プログラムdeタマゴ

    数年ぶりとかいうレベルでJavaのスレッドに触ったもんだから色々忘れてたので、忘れてたことまとめておく。 ダブルチェックロッキングパターンって何でダメなんだっけ? Javaではダブルチェックロッキングパターンって場合によってはクリティカルにヤヴァい事があります。やばいってことは覚えてたんだけど、どういう理由で、どういう場面でやばいのか忘れてました。 private Object checkObj; public void dcheck(){ if( checkObj == null) synchronized{ if(checkObj==null){ Object o = new Object(); checkObj = o; } } ……… } 上のコードがクリティカルにヤヴァいパターンです。 ダブルチェックロッキングパターンってのは主に、マルチスレッド環境でシングルトンなオブジェクトを

    Javaでマルチスレッドするときの注意をまとめてみた - プログラムdeタマゴ
  • Java の ExecutorService の使い方 - Java 入門

    Java の ExecutorService でスレッドプールを利用できる ここで説明するのは、おそらくもっとも安全にマルチスレッドプログラムを書く方法です。 さらに同様の方法で簡単に拡張することで、複数のスレッドを効率よく使うスレッドプール (Thread Pool) を利用できますので、 ぜひ覚えておきたい方法です。 その方法とは、 ExecutorService を利用することです。 ExecutorService では、 「Java のマルチスレッド・プログラミングの基」 でみたように Thread オブジェクトをそのまま生では使いません。 ExecutorService ではスレッドプールが用意されるので、そこにタスクがディスパッチされることで処理が行われます。 Java のタスクの状態 Executor によって処理されるタスクの状態は次の四つです。 created (作成さ

    Java の ExecutorService の使い方 - Java 入門
  • OutOfMemoryErrorの原因と対応(2) | プログラミング

    前回(OutOfMemoryError回避のためのJavaコーディング – 前編)に引き続き、OutOfMemoryErrorの話題。前回は、OutOfMemoryErrorを3パターンに分けた。 (A)サイズオーバー型 巨大な領域確保によって一気にヒープの最大サイズをオーバー (B)メモリリーク型 開放されないオブジェクトが溜まり続けることで使用中メモリが徐々に増加し、メモリが枯渇 (C)マルチスレッド型 長時間処理により”死んだ”スレッドがメモリをい尽くす 今回は(C)マルチスレッド型に関連するOutOfMemoryErrorを紹介する。 (C)”死んだ”スレッドがメモリをい尽くす – マルチスレッド型 HTTPリクエストの処理に長時間を要する場合、そのリクエスト処理中で確保したメモリ領域が開放されずに残されたままとなることがある。 長時間かかる処理といえば、大量データの処理や複雑

    OutOfMemoryErrorの原因と対応(2) | プログラミング
  • Java Sample マルチスレッドサンプル

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

  • 1