私はスレッドを独学しようとしていますが、synchronized() を機能させることができないようです。これは私がやっていることです:
クラス Test で変数を宣言しています
static String toggy = "false";
次に、この実行メソッドを使用した実行可能 (MyRunnable):
@Override
public void run() {
synchronized (toggy) {
System.out.println("toggy for " + name + " BEFORE = " + toggy);
int b = 0;
for(int i=0; i<1000; i++) {
b++;
}
System.out.println("toggy for " + name + " AFTER = " + toggy);
System.out.println("--------------------------------------------\n");
if(toggy.equals("false")) {
toggy = "true";
} else if(toggy.equals("true")) {
toggy = "false";
}
}
}
私はここでこれをテストしています:
for (int i = 0; i < 90; i++) {
Runnable task = new Test.MyRunnable(i+"");
Thread worker = new Thread(task);
worker.setName(String.valueOf(i));
// Start the thread, never call method run() direct
worker.start();
}
私が理解していることから、同期ブロックは、特定のスレッドの実行中に「toggy」の値が変更されるのを防ぐ必要があります。しかし、時々プログラムを実行すると、実行されます。私は何が欠けていますか?