Java Is the Language of Possibilities Java is powering the innovation behind our digital world. Harness this potential with Java resources for student coders, hobbyists, developers, and IT leaders.
スレッドセーフ、スレッドセーフって何なのよ!本当の気持ち聞かせてよ! はじめに 皆様おひさしぶりです。 久しぶりに Effective Java 読書会のまとめを上げていきたいと思います!!! 今回の範囲 269 ページ 〜 278 ページ 前回はこちら http://d.hatena.ne.jp/amachang/20100309/1268153192 synchronized を付ければスレッド・セーフってわけではない synchronized はスレッド・セーフを実現するための一つの方法(実装の詳細)であって、 synchronized を使っているからスレッド・セーフというわけではないし、 synchronized を使っていないからスレッド・セーフじゃないというわけではない そもそも、スレッド・セーフとは何か そのクラスのインスタンスに対するどんな順番で行われる操作も仕様的に正し
シングルスレッド設計 一般的に Swing はシングルスレッド設計であり、他のスレッドが介入してはいけない 逆に言えば、Swing は常に一つのスレッドからのみアクセスすることができます なぜ、Javaの得意分野である「マルチスレッド」を切り捨てるようなことをしたのでしょうか? マルチスレッドはプログラムが複雑で上級プログラマであっても困難といわれます スレッドセーフクラスを拡張するということは、プログラマも熟練者である必要があります また、スレッドの状態をチェックし同期をとるという動作もオーバーヘッドにつながります このような拡張の簡易化や動作の合理化のために Swing はシングルスレッド設計なのです 正確には、Swing コンポーネントが描画されてからが対象になります その後は、イベントディスパッチスレッドからのみアクセス可能となります イベントディスパッチスレッドとは、コールバック
概要 Javaでは、マルチスレッド用のクラスとしてThreadが用意されている。[2017-04-15] しかし新しいJavaでは、Threadを直接使う事はあまり無い。 ExecutorService/Future(JDK 1.5)やFork/Join(JDK 1.7)といったクラスが追加されているので、そちらを使う。 Java21で仮想スレッド(virtual thread)が導入された。[2023-09-23] これにより、従来のスレッドはプラットフォームスレッド(platform thread)と呼ぶようになった。 Javaでは、マルチスレッド用のThreadクラスが用意されている。 Threadを継承して独自のクラスを作り、runメソッドをオーバーライドして処理本体を記述する。 class スレッドクラス名 extends Thread { @Override public vo
ところで、キューはデータを先入れ先出し(FIFO)するリスト構造ですが、対照的な構造としてスタックがあります。スタックは、データを後入れ先出し(LIFO:Last In First Out)するデータ構造です。 スタックは、最近でこそ目にしなくなった「スタックオーバーフロー」というエラーが起きる原因(?)になっていたもので、コンピュータの中では日常的に使用されているものです。 それでは、第1回に倣ってキューをクラスとして定義するとどうなるのかを以下に書き出してみました。2番目の要素は必須とはいえませんが、内部的には必要な要素なので外形的にも値を返せる方がいいでしょう。 Queueクラスの定義: Queueは複数のデータを保持することができる Queueは保持しているデータの個数を返すことができる Queueはデータをエンキューすることができる Queueはデータをデキューすることができる
Cygwinを何気にアップデートした際、シェル起動時にエラーが発生するようになった。 : command not found bash: /cygdrive/h/home/torutk/.bashrc: line 20: syntax error: unexpected end of fileみたいな感じです。bashを3.1.6に戻すとエラーは発生しないので、bashのアップデートが原因です。 で、いろいろ調べると、.bashrcをはじめとしたスクリプトファイルの改行コードがCR+LFだと発生することがわかりました。前はCR+LFでも問題なかったのですが・・・。 makeもCygwinの最新3.80-1にするとWindowsのドライブ文字を含むパスを受け付けないようになっていることなど、なんか最近Windowsに厳しいバージョンアップが行われているようです。 昔は、以下のようにmainメ
では、ReadWriteLockのサンプル。 読み込みスレッドは互いにロックせず、書き込みスレッドは他のスレッドとは同時に動かせない、というロックです。 サンプルでは、「か電車」が書き込みスレッド、「電車」が読み込みスレッドです。「か電車」が動くときには他のスレッドは動けません。 ReadWriteLockの実装としては、再入可能なReentrantReadWriteLockが用意されているので、これを使います。 ReadWriteLock lock = new ReentrantReadWriteLock(); 実際にロックするときは、ReadWriteLockオブジェクトからwriteLock/readLockメソッドで書き込み用ロックか読み込み用ロックを取得します。 Lock reallock = writer ? lock.writeLock() : lock.readLock()
javax.swing.Timer Swingのクラスライブラリの1つとして提供されている。一定時間後にイベントを実行することができる。これは、Swingのイベントスレッドで実行されるので、描画に関わる処理を記述していてもSwingスレッドと干渉しないで済むのがメリット。実行はSwingのイベントキューに載せられるため、正確性には欠ける。 java.util.Timer 汎用のタイマとして提供されている。処理を周期的に実行したり、一定時間経過後に実行したり、指定した日時に実行したりと多彩な機能を持つ。Swingとは無関係なので、ヘッドレス(GUIが無い環境)でも使用できる。Timer専用スレッドで管理され、正確性もjavax.swing.Timerよりは高い。しかし、java.util.Timerの実装上欠点がいくつかある。まず、スケジューリングにシステムクロックを使用するので、システムク
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く