Java スレッドサンプル

スレッドのサンプル



スレッド

このページには、以下のサンプルを掲載しています。 下の項目をクリックをすると各サンプルにジャンプします。 ※2週間以内の新着記事はNewアイコン、更新記事はUpアイコンが表示されます。
  1. スレッド(Threadクラスを使った書き方) ( ThreadSample1A.java )  
  2. スレッド(Threadクラスを使った書き方(匿名クラス))( ThreadSample1B.java )  
  3. スレッド(Runnableクラスを使った書き方)( ThreadSample2A.java )  
  4. スレッド(Runnableクラスを使った書き方(匿名クラス))( ThreadSample2B.java )  

スレッドは、複数の処理を同時に実行したいときに使います。同時といっても見かけ上同時に見えるだけなのですが、スレッドで動作している処理を 短い間隔で順番に実行するため同時に動作しているように見えます。
このページのサンプルプログラムは、4つのサンプルがありますが、動き的には4つとも同じです。記述の仕方をそれぞれ少し変えています。 動きとしては、2つのスレッドから1〜5の数字を標準出力の方に出力しています。実行環境や実行タイミングによって実行結果は このページの実行結果と同じになるとは限りません。このページでは、スレッドに絞ったサンプルのためスレッド以外の処理は、 記述していませんが、スレッドを使う場合は、大抵の場合他の処理と連動させて使います。プログラムのメインの処理とは別に スレッドで処理を実行させスレッド実行によって得られた結果をメイン処理に反映させたりとかいった使い方をします。 例えば、アプレットやSwingのプログラムで画面内に時刻を表示させたりしているプログラムはよく見かけます。そういうプログラムでは 大体スレッドを使っています。そういった処理はスレッドを使った方が簡単だからです。
当サイトのJavaアプレットゲームコーナーPixelゲームでも ゲームの経過時間を表示するのにスレッドを使っています。
また下に記載したページでもスレッドを使ったサンプルを記載していますのでご参考までに。。。。

【関連ページ】
・アプレットサンプル集−アニメーションサンプル ・ シューティングゲームを作ってみよう−弾の発射 ・ シューティングゲームを作ってみよう−弾の発射弾の発射 その3

1. スレッド(Threadクラスを使った書き方)

[ サンプルプログラムのソースコード - ThreadSample1A.java - ]
  1. public class ThreadSample1A {
  2.   public static void main(String[] args) {
  3.     Thread th1 = new ThreadA("Thread1");
  4.     Thread th2 = new ThreadA("Thread2");
  5.     
  6.     th1.start();
  7.     th2.start();
  8.   }
  9. }
  10. class ThreadA extends Thread {
  11.   String name;
  12.   int count = 0;
  13.   ThreadA(String name) {
  14.     this.name = name;
  15.   }
  16.   public void run(){
  17.     for ( int i = 0; i < 5; i++ ) {
  18.       count++;
  19.       System.out.println(name+"-"+count);
  20.       try {
  21.         Thread.sleep(500);
  22.       } catch ( InterruptedException e ) {
  23.         e.printStackTrace();
  24.       }
  25.     }
  26.   }
  27. }

[ サンプルプログラムの実行結果 ]
Thread1-1
Thread2-1
Thread1-2
Thread2-2
Thread1-3
Thread2-3
Thread1-4
Thread2-4
Thread1-5
Thread2-5

[ サンプルプログラムの解説 ]
Threadクラスを継承したクラス(13〜30行目)からThreadオブジェクトを生成します。(上記赤字部分) 上記サンプルでは、th1、th2と2つのThreadオブジェクトを生成&実行を行っています。 スレッドで行う処理は、Threadクラスを継承したクラスのrunメソッド内に記述します。


2. スレッド(Threadクラスを使った書き方(匿名クラス))

[ サンプルプログラムのソースコード - ThreadSample1B.java - ]
  1. public class ThreadSample1B {
  2.   public static void main(String[] args) {
  3.     Thread th1 = new Thread(new Runnable(){
  4.       public void run(){
  5.         int count = 0;
  6.         for ( int i = 0; i < 5; i++ ) {
  7.           count++;
  8.           System.out.println("Thread1-"+count);
  9.           try {
  10.             Thread.sleep(500);
  11.           } catch ( InterruptedException e ) {
  12.             e.printStackTrace();
  13.           }
  14.         }
  15.       }
  16.     });
  17.     Thread th2 = new Thread(new Runnable(){
  18.       public void run(){
  19.         int count = 0;
  20.         for ( int i = 0; i < 5; i++ ) {
  21.           count++;
  22.           System.out.println("Thread2-"+count);
  23.           try {
  24.             Thread.sleep(500);
  25.           } catch ( InterruptedException e ) {
  26.             e.printStackTrace();
  27.           }
  28.         }
  29.       }
  30.     });
  31.     th1.start();
  32.     th2.start();
  33.   }
  34. }

[ サンプルプログラムの実行結果 ]
Thread1-1
Thread2-1
Thread1-2
Thread2-2
Thread1-3
Thread2-3
Thread1-4
Thread2-4
Thread1-5
Thread2-5

[ サンプルプログラムの解説 ]
前述サンプル(ThreadSample1A.java)を匿名クラスを使って記述したサンプルです。

3. スレッド(Runnableクラスを使った書き方)

[ サンプルプログラムのソースコード - ThreadSample2A.java - ]
  1. public class ThreadSample2A {
  2.   public static void main(String[] args) {
  3.     Thread th1 = new Thread(new ThreadB("Thread1"));
  4.     Thread th2 = new Thread(new ThreadB("Thread2"));
  5.     th1.start();
  6.     th2.start();
  7.   }
  8. }
  9. class ThreadB implements Runnable {
  10.   String name;
  11.   int count = 0;
  12.   ThreadB(String name) {
  13.     this.name = name;
  14.   }
  15.   public void run(){
  16.     for ( int i = 0; i < 5; i++ ) {
  17.       count++;
  18.       System.out.println(name+"-"+count);
  19.       try {
  20.         Thread.sleep(500);
  21.       } catch ( InterruptedException e ) {
  22.         e.printStackTrace();
  23.       }
  24.     }
  25.   }
  26. }

[ サンプルプログラムの実行結果 ]
Thread1-1
Thread2-1
Thread1-2
Thread2-2
Thread1-3
Thread2-3
Thread1-4
Thread2-4
Thread1-5
Thread2-5

[ サンプルプログラムの解説 ]
インターフェースRunnableをimplementsしたクラスを使ってThreadオブジェクトを生成しています。 スレッドで行う処理は、Runnableをimplementsしたクラスのrunメソッド内に記述します。

4. スレッド(Runnableクラスを使った書き方(匿名クラス))

[ サンプルプログラムのソースコード - ThreadSample2B.java - ]
  1. public class ThreadSample2B {
  2.   public static void main(String[] args) {
  3.     Thread th1 = new Thread(){
  4.       public void run(){
  5.         int count = 0;
  6.         for ( int i = 0; i < 5; i++ ) {
  7.           count++;
  8.           System.out.println("Thread1-"+count);
  9.           try {
  10.             Thread.sleep(500);
  11.           } catch ( InterruptedException e ) {
  12.             e.printStackTrace();
  13.           }
  14.         }
  15.       }
  16.     };
  17.     Thread th2 = new Thread(){
  18.       public void run(){
  19.         int count = 0;
  20.         for ( int i = 0; i < 5; i++ ) {
  21.           count++;
  22.           System.out.println("Thread2-"+count);
  23.           try {
  24.             Thread.sleep(500);
  25.           } catch ( InterruptedException e ) {
  26.             e.printStackTrace();
  27.           }
  28.         }
  29.       }
  30.     };
  31.     th1.start();
  32.     th2.start();
  33.   }
  34. }

[ サンプルプログラムの実行結果 ]
Thread1-1
Thread2-1
Thread1-2
Thread2-2
Thread1-3
Thread2-3
Thread1-4
Thread2-4
Thread1-5
Thread2-5

[ サンプルプログラムの解説 ]
前述サンプル(ThreadSample2A.java)を匿名クラスを使って記述したサンプルです。




最終更新日:2019/02/13

2015-03-01からの訪問者数
  488 人