Java・スレッド / タイマー

【Java】割込例外 InterruptedException について考える

■ はじめに * 割込例外 InterruptedException は、他の例外とは少し毛色が違った例外なので、 少し考えを整理する ■ 割込例外 InterruptedException http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000386.html より抜粋 * 割り込みが発生した場合に…

【Java】デーモンスレッド (Daemon Thread)

はじめに スレッドには、以下の2種類ある。 1) デーモンスレッド ★今回、扱う事項★ 2) ユーザスレッド ... デフォルト API仕様 https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Thread.html デーモンスレッドとは? * プログラム終了のタイミングで…

【Java】 スレッドダンプ / リソース監視・確認コマンド ~ jps / jcmd / jstack ~

スレッドダンプ とは? * 全スレッドのスタックトレース 取得するタイミング [1] プログラムが遅い、フリーズした場合 [2] クラッシュした場合 スレッドダンプ取得方法 概要 [1] JavaのプロセスIDを確認 [2] jstackコマンド等でスレッドダンプを取得 詳細 [1…

【Java】 java.lang.ThreadLocal について

java.lang.ThreadLocal * スレッド毎の値を保持するためのクラス => 「スレッド毎の値を保持」=「他のスレッドがアクセスすることはない」。 故に、スレッドセーフ(= マルチスレッドで動作しても問題がない)な実装が可能になる * 勝手なイメージだが、Map…

【Java】【非同期】 ThreadPoolExecutor ~スレッドプール ~ [1]

ThreadPoolExecutor * プールされているスレッドと処理すべきタスクのリストを管理 * 以下の関連記事で扱ったWorker Thread パターン(別名スレッドプールパターン)を実装するのに使える http://blogs.yahoo.co.jp/dk521123/32918314.html # ThreadPoolExec…

【Java】【非同期】 ロック・排他制御 について

■ synchronized 文 / volatile 修飾子 / Atomicな変数 を利用する * 詳細は以下の関連記事を参照のこと 関連記事 スレッドの排他制御 ~synchronized 文 / volatile 修飾子 / Atomicな変数 ~ http://blogs.yahoo.co.jp/dk521123/33626978.html ■ コレクショ…

【Java】コールバック関数を実装する ~Future インターフェースを使って、実装編~

はじめに * Future インターフェースについては、以下の関連記事を参照のこと。 http://blogs.yahoo.co.jp/dk521123/34213161.html サンプル Main.java import java.util.Date; public class Main { public static void main(String[] args) throws Interrup…

【Java】【非同期】セマフォ(Semaphore)

■ セマフォ(Semaphore)とは? * 同時にアクセスできるプログラム数を制限するために使われる * 詳細は、以下の関連記事を参照のこと。 https://blogs.yahoo.co.jp/dk521123/37076571.html ■ 主なメソッド https://docs.oracle.com/javase/jp/6/api/java/ut…

【Java】【非同期】 ReentrantLock ~ 排他制御 ~

ReentrantLock * ロックを制御できる。 構文 final Lock lock = new ReentrantLock(); // ロックする lock.lock(); try { // 処理 } finally { // ロックを解放。 lock.unlock(); } 参考文献 仕様 https://docs.oracle.com/javase/jp/6/api/java/util/concur…

【Java】【非同期】ExecutorService / Callable / Future インタフェース

http://blogs.yahoo.co.jp/dk521123/33665815.html の続き Callableインタフェースを使用した場合 * ExecutorService.submit() => 戻り値に Future が受け取れる。以下のサイトの Future パターンに関連すると思われる http://blogs.yahoo.co.jp/dk521123/32…

【Java】コレクション ~ マルチスレッド 編~

■ List * マルチスレッドに対応するのに適した方法を考える [1] Collections.synchronizedList()を利用する List<String> list = Collections.synchronizedList(new ArrayList<String>()); 参考文献 http://www.symmetric.co.jp/blog/archives/29 http://karetta.jp/book-nod</string></string>…

【Java】【非同期】 ThreadPoolExecutor ~スレッドプール ~ [2]

はじめに http://blogs.yahoo.co.jp/dk521123/36245450.html の続き。「[1] new ThreadPoolExecutor(引数)で作成」をみていく。 サンプル SampleThread.java import java.text.SimpleDateFormat; public class SampleThread implements Runnable { private S…

【Java】 ScheduledExecutorService ~スケジューラ~

ScheduledExecutorServiceインターフェース `#`クラス名概要 1newSingleThreadScheduledExecutor一つのスレッドでタスク処理を行う 2newScheduledThreadPoolタスクを処理するスレッドの数を指定できる scheduleWithFixedDelay() * 指定された初期遅延経過後…

【Java】TaskTimer

Timer 利点 * Threadと違って、周期的/一定時間の経過判定を管理する必要がない サンプル SampleTask.java import java.text.SimpleDateFormat; import java.util.Timer; import java.util.TimerTask; class SampleTimerTask extends TimerTask { private Si…

【Java】【非同期】ExecutorService / Runnableインタフェース

Executors ExecutorService `#`クラス名概要 1newSingleThreadExecutor単一スレッドを作成する 2newFixedThreadPool固定数のスレッドを再利用するスレッドプールを作成する 3newCachedThreadPool必要に応じ、新規スレッドを作成するスレッドプールを作成する…

【Java】スレッドの排他制御 ~synchronized 文 / volatile 修飾子 / Atomicな変数 ~

■ synchronized文 * synchronized修飾子を付与したメソッドは、複数のスレッドから同時に呼び出されることがなくなる * クリティカル セクション (critical section)を実現できる (クリティカル セクションについては、以下の関連記事を参照のこと) https:…

【Java】【非同期】CountDownLatch ~カウントダウンラッチ~

■ CountDownLatch そもそも Latch (ラッチ) とは? * 以下の関連記事を参照のこと https://blogs.yahoo.co.jp/dk521123/37076571.html CountDownLatchについて * スレッドを待機させることができる * 特定の条件が満たされるまですべてのスレッドを保留し、 …

【Java】【非同期】 java.util.concurrent について

java.util.concurrent http://docs.oracle.com/javase/jp/6/api/java/util/concurrent/package-summary.html より * 並行プログラミングでよく使用されるユーティリティークラス * マルチスレッド・プログラミングで使用する * concurrent(コンカレント) = …

【Java】スレッド / Thread

スレッドの休止・中断 * sleep() : 指定した時間だけ現在実行中のスレッドを休止させる * yield() : 現在処理中のスレッドを一時休止し、他のスレッドに実行の機会を与える * interrupt() : 休止中のスレッドに割り込みを入れるメソッド 処理を一時停止する…