MultiAccess.java



/** マルチスレッドによるデータのアクセスを実験する MultiAccessクラス */

public class MultiAccess {

  /** 変更する文字列 */

     protected StringBuffer message= new StringBuffer( "Wakkanai" );

  /** 最初に呼び出されるメソッド */

     public static void main( String argv[] ) {

          MultiAccess ma = new MultiAccess();

          MessageEditor editor = ma.new MessageEditor();
          MessageReader reader = ma.new MessageReader();

          editor.start();
          reader.start();
     }

     /** スレッドの処理を実行する MessageEditorクラス */

     class MessageEditor extends Thread {

       /** スレッドによって実行される処理(文字列を変更して、元に戻す) */

         public void run(){

              while( isAlive() ) {

                 synchronized( message ){  // messageオブジェクトにロック
                   message.setLength( message.length() - 1 ); //末尾の文字を削除
                    try{
                        Thread.sleep( 500 ); // 0.5秒休む
                    } catch( Exception e ){}
                    message.append( 'i' );   // 末尾に文字を追加
                 }

                 try{
                     Thread.sleep( 500 ); // 0.5秒休む
                 } catch( Exception e ){}
             }
         }
     } // MessageEditorクラスの定義の終わり


     /** スレッドの処理を実行する MessageReaderクラス */

     class MessageReader extends Thread {

       /** スレッドによって実行される処理 */

         public void run(){

              while( isAlive() ) {

                  try{
                      Thread.sleep( 800 ); // 0.8秒休む
                  } catch( Exception e ){}
                  System.out.println( message.toString() );
              }
         }

      } // MessageReaderクラスの定義の終わり

} // MultiAccessクラスの定義の終わり