Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

시다바리

[Java] 이벤트 디스패치 쓰레드 본문

Language/Java

[Java] 이벤트 디스패치 쓰레드

호서아빠 2008. 8. 21. 20:10


 이벤트 디스패치 쓰레드라는게 있습니다.
 스윙에 관련된 작업이 모두 이 스레드를 통해서 이루어져야 하는데, 이 스레드가 바로 스윙 관련 작업들을 처리하는 역할을 합니다. 간단하게 말해서 스윙 관련 이벤트들을 일렬로 줄세워서 여러개의 이벤트가 동시에 하나의 스윙 컴포넌트에 접근해서 데이터 조작을 하는 것을 막아줍니다. (여러개의 이벤트가 동시에 하나의 JButton의 데이터를 바꾼다면 문제가 생길 겁니다...) 꼭 한순간에 하나의 이벤트가 원하는 작업을 하게끔 해준다는 겁니다. 하루에 하나씩 소원을 들어주는 바람돌이처럼 이벤트 디스패치 스레드는 한번에 한개의 이벤트가 실행되게 합니다.

 invokeLater는 말 그대로 "나중에 호출해라"라는 뜻 인데, 나중에 호출할 대상이 바로 파라미터로 주어지는 Runnable 입니다.

new Runnable() {
    public void run() {
        System.out.println("dialog show");
    }
}

바로 이 놈을 "나중에 호출한다"는 것인데, 왜 나중에 호출할까요?
왜냐하면 지금 하고 있는 작업을 계속 진행하기 위해서 입니다.
지금 계속 하고 있는 작업이란...

public void connect() {
    final JDialog dialog = new JDialog();
    ...
    ...
    System.out.println("dialog dispose");
}

바로 이것입니다. 다이얼로그를 만들고 "dialog dispose"를 출력하는 것이죠. invokeLater에 전달된 Runnable은 이벤트 디스패치 스레드의 큐에 넣는 일을 할 뿐입니다. 코드에 적혀있다고 그게 먼저 실행되는 것은 아니라는 것입니다. 그러니까 현재 진행중인 작업과 디스패치 스레드에서 하는 작업이 분리되어서 진행되는 것입니다.

출처 : http://cafe.naver.com/javacircle.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=9680

Comments