スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
交互にスレッドを動かす方法
んー Javaのことは よくわからんなぁ.......
notifyAll(); って2カ所も書いてるのがダサイのだが、
こういものなのかなぁ
public class Hoge {
  public static void main(String[] args){
	Foo f = new Foo();
	new T(f, "A").start();
	new T(f, "B").start();
  }
}

class Foo{
	public void p(String name){
	  for(int i=0;i<10;i++){
		synchronized(this){
		  System.out.println(name + i);
		  notifyAll();
		  try {
			wait();
		  } catch (InterruptedException e) {
			e.printStackTrace();
		  }
		  notifyAll();
		}
	  }
	}
}

class T extends Thread{
	Foo f;
	String name;
	
	T(Foo f, String name){
		this.f    = f;
		this.name = name;
	}
	
	public void run(){
		f.p(name);
	}
}
スポンサーサイト
森岡@GA将!!!
java.util.concurrent.Semaphoreを使えば少しスマートになりますよ。
二つのTインスタンスが、共通のSemaphoreインスタンスを参照する様にした上で、synchronized文の中を

this.semaphore.acquire();
System.out.println( name + i );
this.semaphore.release();

に変更すればOKです(try/catchは適当に追加して下さい)。

# セマフォのインスタンス生成時にnew Semaphore( 1 )としないとダメかもしれません
2008/10/12 (日) 22:07:10|URL |#CfFZ5oX2
ビンゴ中西
セマフォの存在はしってのですが、
ぜんぜん詳しくみてなかったので、
ちょっと見てみますね。 ありがとうございます。
2008/10/14 (火) 21:52:17|URL |#-
コメントを投稿する
Name:
URL:
Comment:

秘密:管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事にトラックバックする(FC2ブログユーザー)
ブログ検索

プロフィール

ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。

FC2カウンター

カレンダー

06 | 2018/07 | 08
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

ブロとも申請フォーム

この人とブロともになる

| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。