JFrame이라는 스윙 컴포넌트를 main thread가 처리
멀티쓰레드(main, EDT) 상태 -> 데드락, 동기화 문제 발생 가능
앞으로는 EDT가 스윙 컴포넌트를

invokeLater(Runnable doRun) : 비동기 방식 'be executed asynchronously'
invokeAndWait(Runnable doRun) : 동기 방식 'be executed synchronously' - join()과 유사한 결과
둘 다 실행한 쓰레드가 Runnable 객체를 이벤트 큐에 집어넣음 (할 일을 EDT에 전달)
invokeAndWait은 run() 동작이 수행되는 걸 기다림
invokeLater는 run() 동작이 수행되는 걸 기다리지 않음 - 백그라운드 작업에 사용
예시 그림

invokeAndWait은 우리가 사용할 일은 거의 없음
invokeAndWait은 EDT 안에서 사용x, InterruptedException 발생 가능