白旗製作所

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Javaでマルチスレッド

JavaでGUIを触っていて、重めの処理をしたときにGUIが固まってしまい、
処理がおわるまで反応しなくなったことがありました。

これを避けるには、処理を別スレッドにすれば良いということで、
マルチスレッド化をしましたので、それについて少しメモしておきます。

現在のスレッドと別のスレッドを用意して処理させるには、基本的に以下を書けばよいです。

【GUIのクラス内の処理】
  Test test = new Test();
  Thread thread = new Thread(test);
  thread.start();

【重い処理を記述するクラス】
public Test implements Runnable{
  ...
  public void run(){
  hogehoge(); //何か重い処理
  }
  
  private void hogehoge(){
    ...
  }
}

何をやっているのかというと、GUIクラスでは
Thread thread = new Thread(test)
の箇所で、Testクラスのインスタンスtestを使って、threadという新たなスレッドを作り、
thread.start();
で、test.run()をスレッドthread内で動かしています。

Testクラスでは、run()の中に、別スレッドで行わせたい処理hogehoge()を書いておき、
Runnableというインターフェースをimplements しておきます。


こうすることで、重い処理であるhogehoge()を別スレッドで呼び出すことができるため、
GUIが固まることを回避できます。


上記ではGUIクラスから別スレッドを呼び出しましたが、
当然ながら、GUIクラスを別スレッドとして生成してもよいでしょう。


また、わざわざ別クラスを用意するほどでもなかったりする場合、
以下のようにRunnable()クラスのインスタンスを作って、直接処理を記述することも可能です。

Thread thread = new Thread(new Runnable(){
  public void run(){ hogehoge(); }
});
thread.start();



スポンサーサイト
  1. 2015/03/08(日) 22:18:48|
  2. Java
  3. | トラックバック:0
  4. | コメント:0
<<SC-8850のデジタル出力改造(実装編) | ホーム | windows環境でTexWorksとBibTexを使う>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://dededemio.blog.fc2.com/tb.php/22-c8f1778d
この記事にトラックバックする(FC2ブログユーザー)

twitter

プロフィール

dededemio

Author:dededemio
某電機メーカーエンジニア。
真空管からプログラミングまでゆるゆると。

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

Java (8)
未分類 (1)
真空管 (2)
キー配列 (2)
電子回路 (1)
マイコン (1)
PC部品 (2)
VPN (1)
Android (2)
opera (3)
C# (0)
プログラミング (1)
FTP (1)
メール (1)
tex (1)
音源 (2)
Ubuntu (1)
Python (5)
ブログパーツ (1)
GitHub (0)
Gist (1)
Vivaldi (1)
WICED Sense (2)
害虫駆除 (1)
自炊 (0)

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

QRコード

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。