スレッド(Thread)

 


スレッドとは

「スレッド」とはプログラムの最少実行単位のことをさします。
類似の用語に「プロセス」があるが、「プロセス」はアプリケーションプログラム(Wordなど)の実行単位をさしている。

「スレッド」には次のような利点があります。

・1つのプロセスの中に複数のスレッドを走らせることができる(マルチスレッド)。
・プログラムの実行速度を1000分の1秒の単位で制御できる。
・アニメーションを行える。


【例】スレッドを作り、スレッドの中でコマンドプロンプトにHello Threadと表示する

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class thread0 extends Applet implements Runnable {
    Thread th;

    public void start() {
        th = new Thread(this);
        th.start();
    }

    public void run() {
        System.out.println("Hello Thread");
        repaint();
    }

    public void paint(Graphics g) { 
    }

}


【問題】
上の例をdrawStringを用いて書き直しなさい。


実行例




【例】スレッドを作り、スレッドの中でコマンドプロンプトにHello Threadと10回表示する

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class thread2_0 extends Applet implements Runnable {
    Thread th;

    public void start() {
        th = new Thread(this);
        th.start();
    }

    public void run() {
        for(int i=1; i<=10; ++i){
            System.out.println("Hello Thread");
            repaint();
        }
    }

    public void paint(Graphics g) {
    }
}

【例】スレッドを作り、スレッドの中でコマンドプロンプトにHello Threadと10回表示する
   その際、1秒ごとに実行する。

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class thread3_0 extends Applet implements Runnable {
    Thread th;
    int pause = 1000;//待機時間を1000ミリ秒に

    public void start() {
        th = new Thread(this);
        th.start();
    }

    public void run() {
        for(int i=1; i<=10; ++i){
            try {
                Thread.sleep(pause);//1000分の1秒単位で一時停止
            } 
            catch(InterruptedException e)  {
            }
            System.out.println("Hello Thread");
            repaint();
        }
    }

    public void paint(Graphics g) {
    }
}


【問題】
上の例をdrawStringを用いて書き直しなさい。


実行例


【問題】 上の問題で、表示を10倍速くしなさい。

実行例


 


【例】デジタル時計を作る

import java.applet.*; import java.awt.*; import java.awt.event.*; import java.util.Calendar; public class clockDigital0 extends Applet implements Runnable { int second, minute, hour; int pause=1000;//待機時間を1000ミリ秒に Thread th; public void start() { th = new Thread(this); th.start(); } public void run() { for ( int i=0 ; i<1000000 ; i=i+1 ) { repaint(); try { Thread.sleep(pause); } catch(InterruptedException e) { } Calendar jikoku=Calendar.getInstance(); //時を求める hour = jikoku.get(Calendar.HOUR_OF_DAY); //分を求める minute = jikoku.get(Calendar.MINUTE); //秒を求める second = jikoku.get(Calendar.SECOND); System.out.println(hour + ":" + minute + ":" + second); } } public void paint(Graphics g) { } }
【問題】 上の例をdrawStringを用いて書き直しなさい。 実行例


【問題】
上のデジタル時計に年月日を追加しなさい。
年、月、日、は次のように求めます
 年の取得: Calendar.YEAR
 月の取得: Calendar.MONTH
 日の取得: Calendar.DATE


実行例



【問題】

ストップウォッチを作りなさい。
100分の1秒まで表示し、 START  STOP  CLEAR のボタンを付けなさい。

実行例


(注)スレッドを使った時にボタンを作るには

extends Applet implements Runnable , ActionListener

とする


【問題】

ストップウォッチにラップタイムとスプリットタイムを追加しなさいを作りなさい。
100分の1秒まで表示し、 START  LAP1  LAP2  LAP3 SPLIT1 SPLIT2  SPLIT3  STOP  CLEAR  のボタンを付けなさい。

トータルタイムとラップタイム、スプリットタイムの関係は次のようになります。





実行例



(注)スレッドを使った時にボタンを作るには

extends Applet implements Runnable , ActionListener

とする




【問題】
アナログ時計を作りなさい。


実行例