確実に一定時間スリープする - terazzoの日記ではThreadの割り込みがあっても確実に一定時間の停止を試みているが、そもそもこのようなコードは書いてはいけない。 Thread.sleep()は一定時間止まるための便利メソッドとしてよく知られているが、そのときに発生するInterruptedExceptionについての理解は広まっていない気がする。割り込みとはなんなのか。どういう時に使うのか。 目覚まし時計 お昼休みに昼寝をしようとする。寝過ごすといけないので15分後にアラームを鳴らす設定をした。 さて、ひと眠りするか、というところに友人がやってきた。昼寝はやめて売店に行くことにした。果たして売店でアラームが鳴り始めた。 さて、このとき、アラームは15分間の待機を命じられたわけだけども、お昼寝がキャンセルされたことで、もう待機しなくてよくなってしまった。むしろ、さっさと待機をやめてく
スレッドでシグナルを送受信する場合は、典型的にwait, notifyのAPIがよく使われてきました。 でも、Java5以降ではもう古いんですよ。そのやり方。concurrentパッケージにCountDownLatchというクラスがあります。これで同様のことがすごくシンプルに実現できるんです。(Seasar-usersでもwait/notify使った回答を投稿したのですが、Java5以降なら本当はこっちを使うべきです)java.util.concurrent クラス CountDownLatch たとえば、以下のような複数スレッドの開始シグナルと終了シグナルで同期する場合です。 CountDownLatch自身が保持しているカウント数 - countDownメソッドが呼ばれた回数でゼロなったとき、awaitメソッドが待機せず、それ以外は待機します。その特性を使って開始や終了のシグナルを実
はじめにJava SE 6時点では、マルチスレッドプログラミングを行う素材として、当初から持つThreadクラスと、Java 5で追加されたjava.util.concurrentパッケージがあります。また、SwingGUI上でスレッドを扱うjavax.swing.SwingWorkerクラスもJava SE 6から追加されています。Java SE 6におけるスレッドの生成方法java.lang.Threadクラスのインスタンスをnewで生成し、start()メソッドを呼ぶjava.util.concurrent.Executorインタフェースを実装するクラスのインスタンスを取得し、execute()などの別スレッドで実行を依頼するメソッドを呼ぶjavax.swing.SwingWorkerクラスのサブクラスを定義し、そのインスタンスをnewで生成し、Swingスレッド(Eve
Java の ExecutorService でスレッドプールを利用できる ここで説明するのは、おそらくもっとも安全にマルチスレッドプログラムを書く方法です。 さらに同様の方法で簡単に拡張することで、複数のスレッドを効率よく使うスレッドプール (Thread Pool) を利用できますので、 ぜひ覚えておきたい方法です。 その方法とは、 ExecutorService を利用することです。 ExecutorService では、 「Java のマルチスレッド・プログラミングの基本」 でみたように Thread オブジェクトをそのまま生では使いません。 ExecutorService ではスレッドプールが用意されるので、そこにタスクがディスパッチされることで処理が行われます。Java のタスクの状態 Executor によって処理されるタスクの状態は次の四つです。created (作成さ

Single Threaded Execution(Critical Section) パターン † 一度に1つのスレッドしか実行できないようなメソッドを指します(要は排他制御のこと)。 つまり、Javaでは、synchronizedをつけるだけです。C++(Windows環境)では、クリティカルセクションオブジェクトを用います。 synchronized なメソッドを実行中は、そのオブジェクトがロックされます。 (他のスレッドがオブジェクトのメンバにアクセスすることができなくなる) 例えば以下のコードでは、safeMethod()が synchronizedな時とそうでない時で実行結果が異なります。 public class ThreadSafeSample { int x = 0; /// スレッドセーフにしたいメソッド public synchronized void saf
This article discusses how to synchronize access to shared resources and otherwise coordinate execution of threads. Synchronizing Access to Shared Resources One important issue when using threads is to avoid conflicts when more than one thread needs to access a single variable or other resource. If you’re not careful, overlapping accesses or modifications from multiple threads may cause all kinds
こんにちは。 最近いろいろごたついてて、ブログなんか更新してませんが、それなりに充実した生活を送っているのでご心配なくw ところで、今日はいつもどおりPython の話題です。 いま、某 LUG であるプログラムを作っているのですが、その中でマルチスレッドを使えたらなーと思って、ちょっといじってみました。 マルチスレッドが使えると...: 複数の作業を並列して実行できる 一定間隔で何かを実行するような処理を簡単にできて便利。CPU を有効的に使える などいろいろ利点がありますが、今回は主に 2 番目のものをターゲットにしてみました。 結局、1番目も関わってくるんですけどね。Python でスレッドを生成するには、threading モジュールを使うのが便利です。 http://www.python.jp/doc/release/lib/module-threading.html こい
Delphi Tips - マルチスレッドアプリケーション 概要: Delphi Tips - マルチスレッドアプリケーション Delphi 2.0J/3.1Jには、Win32でサポートされているマルチスレッドアプリケーションを簡単に作成することのできる、TThreadオブジェクトが用意されています。ここでは、Delphi 2.0J/3.1Jでのマルチスレッドの使い方を説明します。 1. TThread プログラムは、メモリ上にロードされ、ひとつの「プロセス」として実行されます。プロセスは、ひとつのスレッドから起動しますが、ひとつのプロセスから、複数のスレッドを生成することもできます。ひとつのプロセスは、ひとつの仮想アドレス空間を持ちます。 「スレッド」とは、プログラムの一部の実行単位です。スレッドは、 オペレーティングシステムがCPU時間を割り当てるときの基本単位です。ひとつのプロセスの
Windows でマルチスレッドを実現するにはCreateThreadAPI などを駆使する必要があります。 Delphi ではこれらのAPI をカプセル化した TThread クラスが用意されています。今回はこの TThread クラスを利用した簡単なマルチスレッドアプリケーションの構築方法をご紹介します。 TThreadクラス TThread クラスは単にCreateThreadAPI をラップしているだけでなく、別スレッドから安全に VCL にアクセスする手段を提供しています。「安全にアクセスする」 とは、複数のスレッドが同一のメモリ領域をアクセスしないようにすることです。椅子取りゲームでふたりがひとつの椅子に座っちゃうようなことを防ぐ仕組みが TThread クラスにはあるのです。 スレッドとは? スレッドとは実行されているプロセスの一部です。言い換えればプロセスとは1つ
今までは、paint内で描画処理を描いたり、キー入力などのイベントが来てから処理を描いていました。 しかし、ゲームなどのリアルタイムな処理を必要とする作品を作るには少々不便です。 こういう場合は、イベントドリブンで動くメッセージ処理のメインスレッドとは別に、 常に走り続けているスレッドを新規に作成して、ゲームループとして使うのが良いでしょう。 そこで、今回はゲームループの雛形を作ってみたいと思います。 ついでに、メールや電話などから一時停止があった場合からの復帰処理にも対応してみましょう。 以前までのコードとは全体的に変わってくるので、全て書き直してください。 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
1リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く