2014-01-06 5 views
0

Java 스레딩에 대해 배우는 작은 응용 프로그램을 만들고 있습니다. 작은 조각의 데이터 (포커 핸드)를 분석하고 손이 승리 한 핸드라고 판단되면 디스플레이 메시지를 출력하는 스레드를 실행하고 싶습니다.다른 스레드에 데이터 전달, java

이미 갑판이 비어있을 때까지 손을 생성하는 부분을 완성 했으므로 데이터를 분석하고 표시 메시지 (단지 간단한 System.out)를 트리거하는 다른 스레드로 그 데이터를 전달하는 방법을 알아야합니다. .

처리중인 모든 손에 대해 새 스레드를 생성하고 생성자에서 카드를 전달하는 대신 현재 실행중인 스레드에이 작업을 수행하고 싶습니다.

내 deckHandler는 다른 스레드로 전달하려는 컬렉션 개체를 반환합니다. 그게 내가 어떻게해야할지 모르겠다.

+3

물론입니다. 지금까지 가지고있는 것과 실패한 시도를 보여주세요. – Keppil

+0

코드 스 니펫과 조금 더 자세한 설명이 추가되었습니다. – Organiccat

답변

1

아마도 BlockingQueue 몇 가지를 사용하고 싶을 것입니다. 손을 생성하는 스레드가 하나의 대기열에 손을 댄다. 스레드 검사 손은 대기열을 폴링하고 발견 한 손을 확인합니다. 그런 다음 결과를 손 생성 스레드가 폴링하고 표시 할 수있는 두 번째 큐에 씁니다.

0

이렇게하려면 여러 가지 방법이 있습니다.

간단한 접근 방식은 ThreadWin 생성자를 통해 참조로 전달하는 Queue을 만드는 것일 수 있습니다.
그러면 주 스레드의 큐에 전달할 개체를 추가하고 스레드의 ThreadWin 스레드의 새 개체를 수신합니다. 특히 그것은 BlockingQueue처럼 잘 맞는 것 같습니다.

+0

Executor에서이 작업을 수행 할 수있는 방법이 있습니까? 또는 나는 그것의 개념을 오해하고 있는가? – Organiccat

+0

@ Organiccat :'Executor'를 사용하든 안하든 실제로 상황이 바뀌지는 않습니다. 이는 스레드가 시작되고 관리되는 방법에만 영향을 미칩니다. 실행중인 쓰레드에 데이터를 전달하고자한다면, 어떤 종류의 메시지 채널, 예를 들어'BlockingQueue'가 필요합니다. – Keppil

0

그것은 당신이 당신의 "ThreadWin는"

기본적으로 DeckHandler을 (http://en.wikipedia.org/wiki/Observer_pattern)을 관찰 할 수 있습니다 같은 소리는 DeckHandler이 PokerHands의 새로운 배치를 얻을 때 통지됩니다 있도록 DeckHandler에 "등록"할 ThreadWin 스레드 .

ThreadWin 스레드에 알리면 "쉬는 것이 멈추고"어떤 손이 가장 좋았는지 결정됩니다.

0

BlockingQueue을 사용하면 간단한 소비자 생산자 시나리오를 만들 수 있습니다. 설명서에는 간단한 예제가 있습니다.

동시성을 더 잘 이해하려면 this도 읽어야합니다.

아마도 가장 좋은 방법은 java.util.concurrent 패키지 스레드 풀을 사용하여 작업을 실행하는 것입니다. Threadpool은 구현하기 쉽고 훌륭하지만, threadpools를 사용하는 것 외에는 많이 배울 수 없습니다.

관련 문제