「スレッド」とはプログラムの最少実行単位のことをさします。
類似の用語に「プロセス」があるが、「プロセス」はアプリケーションプログラム(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
とする
【問題】
アナログ時計を作りなさい。
実行例