우리 모두 알다시피, ++는 자바에서 원자가 아니기 때문에 그것을 증명하기위한 프로그램을 작성하려고합니다.증명하는 법 i ++은 원자가가 아니다
제 아이디어는 여러 개의 새로운 스레드와 각 스레드 내부에서 증가 카운트 (Main 클래스의 정적 필드)입니다.
threadNum * iteration > count,
은 우리가 원자하지 ++ 내가 증명할 수 있지만, 실제로 나는 항상 동일한을 가지고있어. 내가 알고하지 않습니다, 나는 내가하고 위의 프로그램에서 J를 변경하는 방법
i*j === 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.
입니다 그리고 더 이잖아요 : 여기
내 코드입니다 유용한 정보 :이 프로그램은 JRE 6, 7 및 8에서 테스트되었습니다. Java 5 이전에서는 테스트하지 않았습니다.
두 개의 루프. 시작하려면 하나, 가입하려면 하나. 모든 스레드가 순차적으로 실행됩니다. – Marvin
본질적으로 싱글 스레드 인 순간에 모든 스레드가 시작될 때까지는't.join()'을 호출하지 마십시오. –