2011-11-14 4 views
1

다른 스레드에서 MySQL 연결이있는 서버를 만들어서 이벤트가 구동되어 메인 스레드를 차단하지 않도록합니다.한 스레드에서 다른 스레드로 다른 스레드로 실행할 메소드 호출

지금까지는 제대로 작동하지만 반환하지 않는 쿼리 (삽입 등)에 유용하지만 다른 스레드에서 실행될 콜백 메서드를 구현하는 방법을 잘 모르겠습니다. 데이터베이스 연결 스레드에서 메서드를 호출하면 해당 메서드에서 해당 메서드가 실행됩니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

+0

이보다 Runnable의 큐를 사용하고 비 연결 스레드를 선택하고 해당 대기열에서 실행하자를 사용하는 몇 가지 예입니다? – Fakrudeen

+0

나는 멀티 스레딩을 처음 접했을뿐, "선택 및 실행"의 의미를 설명 할 수 있습니까? –

답변

3

여기에 java.util.concurrent.FutureTask이 있습니다.

그렇지 않으면 DB 스레드가 명령/쿼리 풀을 구현하고 각 명령/쿼리에 대해 리플렉션을 사용하여 특정 개체의 콜백 메서드를 호출 할 수 있습니다. 이렇게하면 논 블로킹 명령 대기 및 명령/쿼리 완료에 대한 알림이 허용됩니다.

2

당신은

1

한 메커니즘이 FutureTask 인스턴스의 대기열 (ConcurrentLinkedQueue)하는 것입니다 결과를 처리 할 객체에 java.util.concurrent.Future 손이를 사용할 수 있습니다. 응용 프로그램 스레드는 인스턴스를 큐에 추가 한 다음 작업을 완료하여 폴링합니다. 데이터베이스 연결 스레드는 작업 할 서비스의 대기열을 폴링합니다.

0

일반적으로 콜백은 다른 스레드에서 실행됩니다. 호출 스레드에서 무언가를 호출하려면 Future 객체와 함께 ExecutorService를 사용합니다. 어떤 스레드가 작업을 수행하는지 신경 쓰지 않으면 DB 쿼리를 수행하는 스레드에서 호출하거나 다른 스레드 풀에 작업을 추가합니다.

여기 ExecutorServices

http://tutorials.jenkov.com/java-util-concurrent/executorservice.html

관련 문제