내가 다음과 같이 브레이크 포인트 다음과 같은 코드를 실행하려고 멀티 스레드 코드에있는 모든 중단 점에서 중지하지 : 나는 제거하면 ...인 IntelliJ -
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Starting"); //breakpoint here
}
}).start();
int i = 10;
i++; //breakpoint here
이 코드 만 전을 실행할 때 ++ 중단 점 적중 그 하나, 다른 스레드의 중단 점이 올바르게 맞춰집니다. 이 이상한 행동이 왜 발생합니까?
개인적으로 이것이 경쟁 조건이라고 생각합니다. 내 경우에는 * 이력서 *는 여전히 ** 새 스레드에서 중단 점을 트리거하지 않습니다 **. 수정해야 할 유일한 방법은 새 스레드를 시작하기 전에 중단하지 않는 것입니다. 그러면 모든 것이 작동합니다. – kervin
중단 점의 일시 중단 정책이 '모두'('스레드'와 반대)로 설정되어 있습니까? –
예 그들은 모두 있습니다. 중단 점을 스레드 시작 지점에서 더 가깝게/더 멀리 이동하여 문제를 유발할 수 있으므로 어떤 종류의 경쟁 조건 만 확인할 수 있습니다. – kervin