JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > スレッド編  
メニュー
Home
情報交換掲示板
ツールの部屋
Java関連の書籍
アプリケーション編
Swing編
Swing(イベント)編
Swing(Look&Feel)編
アプレット編
iアプリ編
サーブレット編
サーブレット(Linux)編
サーブレット(web.xml)編
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
JSP編
JSP(ディレクティブ)編
JSP(アクション)編
JSP(スクリプト)編
JSP(オブジェクト)編
JSP(カスタムタグ)編
JSP(データベース)編
Apache + Tomcat編
Struts編
JDBC編
JDBC(データソース)編
JDBC(MySQL)編
JDBC(PostgreSQL)編
JDBC(トランザクション)編
JavaMail(SMTP)編
JavaMail(POP)編
JNI編
RMI編
RMI(アプレット)編
CORBA編
JNDI編
EJB編
EJB(Entity Bean)編
JMS(PTP)編
JMS(Pub/Sub)編
XML(SAX)編
XML(DOM)編
XSLT編
SOAP編
国際化編
国際化(タイムゾーン)編
国際化(通貨)編
リフレクション編
コレクション編
コレクション(Set)編
コレクション(List)編
コレクション(Map)編
スレッド編
正規表現編
アサーション編
ログ機能編
サウンド編
ファイル入出力編
URL編
ソケット編
データグラム編
HTTP
FTP編
jar編
javadoc編
Ant編
外部コマンド編
プロパティファイル編
システムプロパティ編
Eclipse編
  2002/02/03  田中宏和
Last Update 2003/01/13
スレッド編
◆スレッドとは?
スレッドとはプログラムの処理単位のことです。mainメソッドを実行している処理も一つのスレッドです。そのスレッドのことをメインスレッドと呼びます。メインスレッドが終了するとプログラムも終了します。
◆マルチスレッドとは?
マルチスレッドとはメインスレッドとは別に処理単位(スレッド)を複数生成して、並行して複数の処理を行うことを言います。見かけ上は複数の処理を同時に実行しているように見えますが、実際にはCPUの処理時間を短い単位で分割して複数の処理単位(スレッド)に順番に割り当てることによって同時に実行しているように見せています。
◆ここでの環境
OS Windows 2000
J2SE SDK 1.4.0
◆Java実行環境の構築
アプリケーション編を参考にしてJava実行環境を構築してください。
◆Javaでのマルチスレッドの実現方法
Javaでマルチスレッドを実現するにはThread クラスを利用します。Threadクラスを継承したオブジェクトを作成してrunメソッドをオーバーライドします。runメソッドは直接呼び出してはいけません。Threadクラスのstartメソッドを実行することによってrunメソッドが適切に呼び出されスレッドが起動するようになっています。
class HelloWorldThread extends Thread {
  public void run() {
    // このスレッドの処理を記述
  }
} 
◆Javaソースコード
ここでは「Helloスレッド」と「Worldスレッド」の2つのスレッドを生成してその動きを見てみたいと思います。
HelloWorldThread.java(ここからダウンロード)
public class HelloWorldThread extends Thread {
  // コンストラクタ
  public HelloWorldThread(String name) {
    super(name);
  }

  public static void main(String[] args) {
    // スレッドオブジェクトのインスタンスを生成
    HelloWorldThread thread1 = new HelloWorldThread("Helloスレッド");
    HelloWorldThread thread2 = new HelloWorldThread("Worldスレッド");
    // スレッドを開始
    thread1.start();
    thread2.start();
  }

  public void run() {
    for (int i=0;i<10;i++) {
      // スレッド名とループ数を表示します
      System.out.println(this.getName() + " : " + i);
      try {
        // 500ミリ秒間スレッドを停止します
        sleep(500);
      } catch (InterruptedException e) {

      }
    }
  }
} 
 
◆コンパイルと実行
コマンドプロンプト

C:\JavaHello\Thread>javac HelloWorldThread.java

C:\JavaHello\Thread>java HelloWorldThread
Helloスレッド : 0
Worldスレッド : 0
Helloスレッド : 1
Worldスレッド : 1
Helloスレッド : 2
Worldスレッド : 2
Helloスレッド : 3
Worldスレッド : 3
Helloスレッド : 4
Worldスレッド : 4
Helloスレッド : 5
Worldスレッド : 5
Worldスレッド : 6
Helloスレッド : 6
Worldスレッド : 7
Helloスレッド : 7
Worldスレッド : 8
Helloスレッド : 8
Worldスレッド : 9
Helloスレッド : 9

C:\JavaHello\Thread>

おおおおお!同時に実行されていますね!!
 
◆Runnableインターフェースを使用する
Runnableインターフェースを実装(implements)したクラスを使用することでマルチスレッドを利用できる方法もあります。
class MyRunnable implements Runnable {
public void run() {
// このスレッドの処理を記述
}
}
この場合Threadを生成するときにRunnableインターフェースを実装したクラスのインスタンスをコンストラクタの引数に渡します。
Thread thread = new Thread(new MyRunnable());。
thread.start();
■ソースコードの作成
アプレットクラスにRunnableインターフェースを実装してマルチスレッドで動作するアプレットを作成します。ここでは1秒に一回、現在の時刻を再描画するためにスレッドを使用します。
HelloWorldClockApplet.java(ここからダウンロード)
import java.awt.Graphics;
import java.applet.Applet;
import java.util.Date;

public class HelloWorldClockApplet extends Applet implements Runnable {
  Thread thread = null;;
  // paintメソッドをオーバーライド
  public void paint(Graphics g) {
    // 現在の時刻を座標(20,20)の位置に描画
    Date now = new Date();
    g.drawString(now.toString() , 20, 20);
  }
  // startメソッドをオーバーライド
  public void start() {
    if (thread==null) {
      // スレッドを生成
      thread = new Thread(this);
      // スレッドを開始
      thread.start();
    }
  }
  // stopメソッドをオーバーライド
  public void stop() {
    // スレッド終了
    thread = null;
  }

  // スレッドの処理
  public void run() {
    while (thread!=null) {
      // 再描画します
      repaint();
      try {
        // スレッドを1000ミリ秒停止します
        thread.sleep(1000);
      } catch (InterruptedException e) {
      }
    }
  }
}
 
■表示用HTMLファイルの作成
ClockApplet.html(ここからダウンロード)
<html>
<head>
<title>時計アプレット</title>
</head>
<body>
<applet code = "HelloWorldClockApplet" width="200" height="100">
</applet>
</body>
</html>
■コンパイル
コマンドプロンプト

C:\JavaHello\Thread>javac HelloWorldClockApplet.java

C:\JavaHello\Thread>

■表示
作成したHTMLファイルをダブルクリックして表示します。アプレットのクラスファイルはHTMLファイルと同じ場所に置いてください。
おおおおおお!表示されましたね!
うまく表示できない場合は、IEのメニューの「ツール」→「インターネットオプション」→「詳細設定」で「<applet>にJava 2 v○○を使用」にチェックを入れてから表示してみてください。
 
■関連
アプレット編
■書籍
Java関連の書籍

 
  ネットで買えば断然お得!お買い物なら楽天市場
ツールの部屋 - Java関連の書籍 - デザインパターン - 情報交換掲示板 - HOME