내 응용 프로그램에는 여러 스레드의 데이터 요청을 처리하는 단일 클래스 (직렬 COM 포트와 통신)가 있습니다. 요청이 처리되는 동안 스레드는 wait()
이어야합니다. 대기중인 모든 스레드를 깨우지 않고 데이터 준비가되었음을 스레드에 알리고 (다시 보내려면) 어떻게 수 있습니까?특정 스레드에 데이터 전송
답변
모든 스레드에 하나씩 blocking queue을 작성하고 싱글 톤에 삽입하십시오. 답변이 도착하면 적절한 스레드의 큐를 선택하고 제안 (E o) 메소드가 포함 된 메시지를 해당 메시지에 넣으십시오.
take() 메소드가있는 스레드에서 무한 시간 동안 응답을 기다리거나 대기 시간 대기를 위해 poll (긴 시간 초과, TimeUnit 유닛)을 사용할 수 있습니다.
concurrent queue을 추가로 사용하면 차단하지 않고 단일 입력을 공급할 수 있습니다.
@Lexandro는 좋은 대답을 가지고 있지만 요구 사항을 충족시키는 더 간단한 대안은 (스레드 대기/차단은 o.k입니다.) 정적 클래스의 메소드를 동기화하는 것입니다.
나는 동의하지만, 나는 개인적으로 동기화 된 블록/방법의 사용법이없는 해결책을 선호한다. – Lexandro
동의. 나는 너의 upvote 줄거야. – user949300
나는 작동하지 않는 유사한 해결책을 시도했다. 그 원인은 모든 데이터를받는 하나의'serialPortActionListener'였다. 그러나 각 패킷은 특정 스레드 (스레드가 무선 송신기에서 데이터를 요청하므로 해당 클라이언트로 데이터를 전송할 수 있도록 해당 주소를 다시 전송합니다)에 직면합니다. 내가 보았 듯이, 데이터를 특정 쓰레드로 리다이렉션 할 필요가있는'serialPortActionListener' 인스턴스가 하나있다. 그래서 어떻게 든 각 스레드에 대한 참조를 유지해야합니다. – BrunoPires
- 1. 특정 조건에서 자동으로 데이터 전송
- 2. 코어 데이터 NSPrivateQueueConcurrencyType 스레드에 스레드 컨텍스트 특정 데이터 저장
- 3. 특정 부스트 스레드에 참여
- 4. 전송 데이터
- 5. 전체 채널이 아닌 특정 클라이언트에 데이터 전송
- 6. 서버에서 특정 안드로이드 장치로 데이터 전송
- 7. 특정 IP 및 포트로 데이터 전송
- 8. 소켓 기반 앱의 특정 사용자간에 데이터 전송
- 9. 스레드에 개인 데이터 저장
- 10. Qt 4.7 특정 스레드에 신호를 내 보냅니다.
- 11. 특정 스레드에 Twisted 코드 지연
- 12. C의 특정 스레드에 대한 호출
- 13. 모듈 데이터 전송 구성
- 14. 다른 스레드에 데이터 전달, java
- 15. 스레드에 대한 Django 전역 데이터
- 16. 데이터 전송 아키텍처 디자인
- 17. 특정 프로그램의 네트워크 전송 모니터링
- 18. SOA의 데이터 전송 클래스
- 19. DMA 전송 데이터 속도
- 20. 데이터 전송 다운로드 + 업로드 데이터 계산
- 21. 특정 변수를 함수에 전송
- 22. 데이터 마이그레이션에서 대용량 데이터 전송
- 23. vb.net에서 데이터 세트로 데이터 전송
- 24. 데이터베이스 간의 데이터 전송 측정
- 25. 목록 위젯 간 데이터 전송
- 26. 데이터 전송 속도가 전송 속도에 따라 변합니다.
- 27. "데이터 전송 유형"은 "데이터 전송 객체"와 동일합니까?
- 28. ASP.NET OData - 데이터 전송 개체가있는 데이터 전송 개체가있는 패치 구현
- 29. 프로세서 (코어)가 특정 스레드에 의해 사용됨
- 30. stdout을 특정 스레드에 대해서만 파일로 리디렉션
자바 1.4를 사용할 필요가 없다면'java.util.concurrent'의 객체를 사용해야하고'wait/notify'를 사용하면 안됩니다. –
[BlockingQueue] (http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html)를 사용하십시오. - 대기열에서 스레드가 대기하도록 'take'를 사용하십시오. 데이터가 준비 될 때까지 –
싱글 톤은 멀티 스레딩 프로그래밍에서 악몽입니다. –