同期を使用した単純なマルチスレッドテスト。「同期」されていれば、他のスレッドが待つだろうと思いました。私は何が欠けていますか?
public class MultithreadingCounter implements Runnable {
static int count = 0;
public static void main(String[] args) {
int numThreads = 4;
Thread[] threads = new Thread[numThreads];
for (int i = 0; i < numThreads; i++)
threads[i] = new Thread(new MultithreadingCounter(), i + "");
for (int i = 0; i < numThreads; i++)
threads[i].start();
for (int i = 0; i < numThreads; i++)
try {
threads[i].join();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
increment();
}
public synchronized void increment(){
System.out.print(Thread.currentThread().getName() + ": " + count + "\t");
count++; // if I put this first or increment it directly in the print line, it works fine.
}
}
私はこれが次のようなものを表示すると思いました:
0: 1 2: 0 1: 2 3: 3
しかし、その実際の出力:
0: 0 2: 0 1: 0 3: 3
そしてこのような他のバリエーション。順番にではなく、各増分(つまり、0、1、2、3)を表示する必要があります。