私は皆知っているように、私は+ + Javaで原子ではないので、私はそれを証明するプログラムを作成しようとします。私が++であることを証明する方法
私の考えは、いくつかの新しいスレッドを追加し、各スレッド内でカウントを増やすことです(Mainクラスの静的フィールドです)。
threadNum * iteration > count,
は、その後、我々はアトミックではありません++私を証明することができますが、実際に私はいつも同じ、それらを持っていれば。ここで
は私のコードです:
import java.util.ArrayList;
import java.util.List;
public class ConcurrentTest{
private static int count = 0;
public static void main(String[] args) throws Exception{
List<Thread> threads = new ArrayList<>();
for(int i = 0; i<12; ++i){
threads.add(new Thread(() -> {
for(int j=0; j<1000000; ++j) {
count++;
}
}));
}
for(Thread t: threads){
t.start();
t.join();
}
System.out.println(count);
}
}
結果は12000000.
そして、私は上記のプログラムでは、iとjを変更する方法がない母校、i*j === count.
である私があれば知りませんこれは参考になります:このプログラムはJRE 6,7および8でテストされています。Java 5以前ではテストしていません。
2つのループ。開始するには1つ、参加するには1つ。すべてのスレッドが順番に実行されます。 – Marvin
本質的にシングルスレッドのときは、すべてのスレッドが起動するまで 't.join()'を呼び出さないでください。 –