지난 몇 년 동안 저는 주로 스레드 접근 측면에서 매우 보수적 인 Eclipse 개발을했습니다 : UI 위젯 (예 : 색상, 텍스트)에서 UI 위젯의 속성을 변경하려는 시도는 throw합니다. 예외.스윙의 스레딩 정책을 위반하면 어떻게됩니까?
많은 수의 사용자 정의 위젯이있는 윈도우가있는 기존의 Swing 프로그램을보고 있습니다. 이 위젯 각각에 대해 돌연변이 함수를 실행하는 별도의 스레드가 있으며 돌연변이 함수는 레이블 색상 및 값과 같은 일부 값을 읽고 일부를 작성합니다 (예 : 배경색 변경). 커스텀 페인팅이나 그와 비슷한 것들이 없다는 점에 주목하십시오. 그 중 일부는 대부분 JLabel 인 하위 위젯에 대한 변경 사항 일뿐입니다.
현재 이것은 별도의 스레드에서 실행되며 Swing 이벤트 스레드에서는 실행되지 않습니다. 이 스레드는 400 개의 위젯을 모두 처리하고 각각의 위젯을 호출합니다. 업데이트가 제대로 작동하는 것 같지만 GUI가 사용자 입력에 응답하지 않습니다.
Swing 스레드 외부에서 약 0.4msec 동안 실행되는 모든 것을 취해서 invokeLater 또는 invokeAndWait의 모든 호출을 뮤 테이타로 랩핑하면 UI가 훨씬 더 반응적입니다.
내가 이해하려고 노력 중이 야입니다 :
1) 가끔 합법적 인 스윙 스레드 외부에서 모든 통화를 할 수 있나요?
2) 외부에서 호출 할 때 스윙 스레드에 미치는 영향 및 UI의 응답 성이 떨어지는 이유는 무엇입니까?