확실한 방법입니다.하지만 확실하게 알고 싶습니다. - 은 invokeLater() 또는 invokeAndWait()의 경우 주어진 관계 이전에 발생합니까?invokeLater() 또는 invokeAndWait의 경우 관계가 제공되기 전에 발생합니까?
메소드는 (SwingUtilities 각각) AWT.EventQueue에 정의되어 있습니다. 뭔가가 EventQueue 에 입력되었을 때 동기화가 발생했기 때문에 동기화 결과로 발생하기 전에 관계가 나타나고 마지막으로 가시성이 주어집니다.
하지만 실제로 그렇게 할 수 있습니까? (내가 그 정보를 어디에서 찾을 수 있습니까?)
예를 들어, 일부 작업자 스레드 내부
...
*<1> heavy computation modifying lots of DATA*
...
SwingUtilities.invokeLater(
new Runnable() {
@Override
public void run() {
*<2> is visibility of modified DATA guaranteed?*
}
}
);
예를 들어, 일부 스레드 한마디로
...
SwingUtilities.invokeAndWait(
new Runnable() {
@Override
public void run() {
...
*<1> change some DATA*
}
}
);
*<2> is visibility of modified DATA guaranteed?*
나는 정말로 당신이 묻고 자하는 것을 이해하지 못합니다. – jzd
위치가 <1> 인 일부 스레드의 첫 번째 예제에서 데이터가 변경된 후 invokeLater()가 호출됩니다. 변경된 데이터가 실행 가능 영역 안의 <2> 위치에 표시됩니까? – user3199797
invokeAndWait는 EDT에서 호출해야합니다. isEventDispatchThread가 false를 반환해야합니다. 그렇지 않으면 몇 가지 예외가 스윙 GUI를 동결시킬 수 있습니다. – mKorbel