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クラスの定義の終わり