////////////////////////////////////////////////////////////////////////////////
//  << j511c.java >>
//
//  スレッド(1):スレッドの作成(内部クラス)
//
//  スレッドを内部クラスで記述する。
//
//  (1)スレッド1(Thread1)を内部クラスで定義。
//     Threadクラスを継承する。
//  (2)スレッド2(Thread2)を内部クラスで定義。
//     Runnableインターフェースを実装する。
//  (3)スレッド1の作成。 
//  (4)スレッド2の作成。 
//  (5)スレッド1の実行。    
//  (6)スレッド2の実行。    
//  (7)mainメソッドの実行。    
//
// ●スレッドプログラムの書き方
//
//      class クラス名 {
//        public static void main(String args[]) {
//
//          // スレッド1の定義(内部クラス)。
//          class Thread1 extends Thread {
//            public void run() {
//              処理の本体
//            }
//          }
//          // スレッド2の定義(内部クラス)。
//          class Thread2 implements Runnable {
//            public void run() {
//              処理の本体
//            }
//          }
//     
//          Thread1 th1 = new Thread1(); // スレッド1の作成。
//          Thread2 r = new Thread2();
//          Thread th2 = new Thread(r); // スレッド2の作成。
//          
//          th1.start(); // スレッド1の実行。
//          th2.start(); // スレッド2の実行。
//        } 
//      }
//
//  ・3つのクラスファイルが作成される。
//   j511c.class, j511c$1Thread1.class, j511c$1Thread2.class
//
////////////////////////////////////////////////////////////////////////////////

class j511c {                                                   
  public static void main(String args[]) {                      
                                                                
    //(1)       
    class Thread1 extends Thread {                              
      public void run() { // 処理の本体。                
        for( int i=1; i<=10; i++ ) {                            
          System.out.println("スレッド1(" + i + ")");          
        }                                                       
      }                                                         
    }                                                           
                                                                
    //(2)            
    class Thread2 implements Runnable {                         
      public void run() { // 処理の本体。              
        for( int i=1; i<=10; i++ ) {                            
          System.out.println("スレッド2(" + i + ")");          
        }                                                       
      }                                                         
    }                                                           
                                                                
    Thread1 th1 = new Thread1(); //(3)         
    Thread2 r = new Thread2();                                  
    Thread th2 = new Thread(r); //(4)        
                                                                
    th1.start(); //(5)      
    th2.start(); //(6)                         

    for( int i=1; i<=10; i++ ) {                            
      System.out.println("mainメソッド(" + i + ")"); //(7)          
    }                                                       
  }                                                             

}                                                               
実行結果
% javac j511c.java
% java j511c
mainメソッド(1)
mainメソッド(2)
mainメソッド(3)
mainメソッド(4)
mainメソッド(5)
mainメソッド(6)
mainメソッド(7)
mainメソッド(8)
mainメソッド(9)
mainメソッド(10)
スレッド1(1)
スレッド1(2)
スレッド1(3)
スレッド1(4)
スレッド1(5)
スレッド1(6)
スレッド1(7)
スレッド1(8)
スレッド2(1)
スレッド2(2)
スレッド2(3)
スレッド2(4)
スレッド2(5)
スレッド2(6)
スレッド2(7)
スレッド2(8)
スレッド2(9)
スレッド2(10)
スレッド1(9)
スレッド1(10)