2011-11-29 3 views
6

메인 프로그램이받는 것에 따라 여러 스레드를 생성하고 특정 스레드로 데이터를 전송할 수 있기를 원합니다.특정 스레드로 데이터 보내기

기본적으로 번호가 포함될 수신 프로그램으로 패킷을 보내고 있습니다. 이 번호는 통신하려는 스레드를 결정하는 데 사용됩니다. 패킷을 같은 번호의 쓰레드로 보내려면 어떻게해야합니까?

예 : 스레드 1,2,3,4 및 5가 있습니다. 내 메인 프로그램은 3 번 패킷을받습니다. 그 패킷을 3 번 스레드로 보내고 싶습니다.

어떻게해야합니까?

+0

왜 연결 상태를 유지하고 해당 소켓을 포함하는 스레드로 보내거나받은 데이터를 위임합니까? –

+0

가상 라우터 (클래스 프로젝트)를 만들고있어 실제 라우터처럼 작동해야합니다. 그래서 내가 만들고있는 이러한 스레드는 라우터에 대해 다른 포트로 작동합니다. 우리의 패킷은 우리 프로그램이 듣고있는 실제 포트로 전송되고 우리의 프로그램은 가상 포트 (스레드)로 그것을 보낸다. –

답변

6

각 스레드에 대한 큐를 만들고 각 스레드가 해당 큐를 수신 대기하도록하십시오. 메인 쓰레드는 각 큐에 데이터 (또는 "메시지")를 넣을 수 있습니다.

선택한 대기열 구조가 동시 액세스 (스레드로부터 안전)에 안전한지 확인하기 만하면됩니다. LinkedBlockingQueue과 같은 것이 좋을 것입니다.

+0

나는 그것을 좋아한다! 대기열이 주 스레드에서 생성되었거나 하위 스레드에서 생성되었거나 둘 다 생성됩니까? –

+1

당신이 원한다면, 나는 각 스레드의 생성과 함께 그것들을 생성 할 것이지만 - 그것은 그들이 메인 스레드에서 생성된다는 것을 의미 할 것이다. 그런 다음 기본 스레드와 하위 스레드가 모두 액세스하여 주 스레드가 데이터를 대기열로 밀어 넣고 하위 스레드가 데이터를 대기열 밖으로 끌어 당깁니다. – ziesemer

+0

다음은 BlockingQueues를 사용하는 생산자 - 소비자 패턴의 예입니다. http://www.javamex.com/tutorials/synchronization_producer_consumer_2.shtml – Luhar

관련 문제