teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

誤字訂正

2016/10/10 08:18

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  UIの処理を行うスレッドはswingではEDT(Event Dispatch Thread)と呼ばれます。EDTでは時間のかかる処理を行ってはいけないという原則があるので、そういう処理は別スレッドで行うという方針になります。以下サーバー処理を行うスレッドをサーバースレッドと呼びます。
2
2
 
3
- サーバースレッドから画面の状態を変える場合はSwingUtilities#InvokeLater/InvokeAndWaitなどを使うと簡単に行えます。逆にEDTから長期間動作しっぱなしのサーバースレッドのようなものへ任意のタイミングで指示をしようとすると若干面倒かも知れません。それ用の便利なクラスもあると思いますが初めてマルチスレッド処理を学ぶケースでは前提知識が少なくその機能の説明自体がわからないこともありそうです。私などはそういったクラスのAPIリファレンスの説明を読んでも最初はちんぷんかんぷんでした。ですのでネットにある記事を手掛かりにするとよいと思います。まずは基本となるThread, synchoronizedや複数のスレッドから安全に更新できるデータをサポートするクラス(AtomicXXX)のあたりから学ばれるとよいと思います。なおEDTからサーバースレッドへコマンドを渡す素朴な例を以下に挙げます。Startボタンでサーバー開始、Stopボタンでサーバーを終わらせるといった感じです。(コンパイルしてないので綴りミスなどあるかもしれませんが雰囲気はつかめるかと思います)
3
+ サーバースレッドから画面の状態を変える場合はSwingUtilities#InvokeLater/InvokeAndWaitなどを使うと簡単に行えます。逆にEDTから長期間動作しっぱなしのサーバースレッドのようなものへ任意のタイミングで指示をしようとすると若干面倒かも知れません。それ用の便利なクラスもあると思いますが初めてマルチスレッド処理を学ぶケースでは前提知識が少なくその機能の説明自体がわからないこともありそうです。私などはそういったクラスのAPIリファレンスの説明を読んでも最初はちんぷんかんぷんでした。ですのでネットにある記事を手掛かりにするとよいと思います。まずは基本となるThread, synchronizedや複数のスレッドから安全に更新できるデータをサポートするクラス(AtomicXXX)のあたりから学ばれるとよいと思います。なおEDTからサーバースレッドへコマンドを渡す素朴な例を以下に挙げます。Startボタンでサーバー開始、Stopボタンでサーバーを終わらせるといった感じです。(コンパイルしてないので綴りミスなどあるかもしれませんが雰囲気はつかめるかと思います)
4
4
 
5
5
  ```java
6
6
  // UIのクラス(EDTでのみアクセス可)