一つのプロセス内で実行する複数の実行の流れがある場合、
それぞれの実行の流れをスレッドと呼びます。
Java Virtual Machineのmainメソッドが一つのスレッドで動作します。
このプログラムの流れと別の流れ(スレッド)を作る場合は、Threadクラスを使います。
java.lang.Object
└java.lang.Thread
詳細は次のリンクで調べましょう。
Javaでスレッドを作るには、Runnableインターフェイスを実装したクラスを作ります。
Runnableインターフェイスは、Threadのクラス用のインターフェイスです。
このRunnableインターフェイスは、run() が宣言されています。
そしてThreadのクラスの内部では、startメソッドで、
Runnableインターフェイスのrun()メソッドを、別スレッドで実行するように作られています。
そこで、どのオブジェクトに作ったrun()メソッドを実行させるか指定する必要があります。
一般に、Threadのクラスのコンストラクタの引数で、
run() メソッドを持つオブジェクト指定して使います。
以下にその方法の実験的プログラムを示します。
ThreadTestクラスにテスト用スレッド(run())を作っています。
mainでこのオブジェクトを生成し、startメソッドで別スレットの
run()をスタートしています。
それによりmainの繰り返し表示の間に、
別スレットの(run())の表示が割り込んで表示されるでしょう。
run()のメソッド終了が、そのスレッド終了です。
class ThreadTest implements Runnable { //Runnableインターフェイスのメソッドをオーバーライドして作る public void run(){ try { System.out.println(" 別スレッド(mainと違う)流れ"); Thread.sleep(2000);//2秒間待つ System.out.println(" 別スレッド(mainと違う)流れ"); Thread.sleep(2000);//2秒間待つ System.out.println(" 別スレッド(mainと違う)流れ"); Thread.sleep(2000);//2秒間待つ System.out.println(" 別スレッド(mainと違う)を終了!"); } catch (InterruptedException e){ System.out.println(" 割り込み例外:2000秒"); } } public static void main1(String[] args) throws Exception{ Runnable test = new ThreadTest(); Thread thread = new Thread(test);// runメソッドを持つこのクラスを指定 thread.start(); // 上記のrunスレッド起動 for (int i = 0; i < 8; i++){ Thread.sleep(800);//0.8秒間待つ System.out.println("mainの流れ:" + (0.8 * i) + "秒"); } System.out.println("mainのスレッドを終了"); } }
以下が、上記プログラム実行のイメージです。実行ボタンで確認ください。
上記を確認後、このボタンをクリックください。→