내가 EventQueue에 대한 일관성없는 행동을 보여줍니다 다음 예제 코드에 문제가 있습니다 기본적으로EventQueue의 일관성 ID의
public static void main(String[] args) throws InvocationTargetException, InterruptedException {
final long[] id1 = new long[ 1 ];
final long[] id2 = new long[ 1 ];
EventQueue.invokeAndWait(new Runnable() {
@Override public void run() {
id1[ 0 ] = Thread.currentThread().getId();
}
});
Thread.sleep(5000);
EventQueue.invokeAndWait(new Runnable() {
@Override public void run() {
id2[ 0 ] = Thread.currentThread().getId();
}
});
System.out.println("id1 = " + id1[0]);
System.out.println("id2 = " + id2[0]);
if(id1[0]!=id2[0]){
System.out.println("These ID's don't match, even though they were retrieved from the same thread.");
}
}
를, 그것은 EventQueue로 스레드의 ID를 가져옵니다 5 초 대기 후 다시 ID를 가져옵니다 .
어떤 이유로 ID가 일치하지 않습니다. 분명히, EventQueue는 파괴되고 재창조되었습니다. 이것은 정상적인 행동입니까? 이것이 어딘가에 기록되어 있습니까? 그게 버그 야? 다른 인스턴스 인 경우에도 ID가 같지 않아야합니까?
Thread.sleep
을 수행하지 않으면 ID가 일치합니다.
내 다른 질문은 :이 문제를 어떻게 해결할 수 있습니까? 내가 만드는 스레드에서 액세스 할 수있는 개체를 사용하고 있습니다. 이것이 이벤트 큐 (반드시 필요하지는 않음) 인 경우, 여전히 이벤트 큐인지 확인할 수 있어야합니다. 더 이상 필요하지 때 AWT 이벤트 발송 쓰레드 가 종료되지 하소서
감사합니다. 나는 거기에 EventQueue 스레드 자체에 대한 특별한 검사보다 더 좋은 방법이있을 것이라고 기대했지만, 내가해야만 할 것 같아요. :) – Tovi7
두 개의 서로 다른 이벤트 스레드를 동일한 것처럼 처리하기 때문에 요구 사항이 특별한 경우라고 말하고 싶습니다. ** 정말로 ** 같은 스레드 액세스 만 허용하려는 경우 해당 체크를 남겨두고 스레드 ID를 테스트하면 충분합니다. –