Java의 Go 채널과 동일
질문:
데이터를 효율적으로 읽어야 합니다. 별도의 리더 스레드를 만들지 않고 여러 차단 대기열에서. Java에 Go의 select/epoll과 동등한 메커니즘이 있습니까?
답변:
Alternative 클래스를 제공하는 JCSP 라이브러리 사용을 고려해 보세요. Alternative는 Go의 select 문과 비슷합니다. 지속적인 폴링 없이 여러 소스 채널의 데이터를 다중화할 수 있는 단일 소비자 스레드를 생성할 수 있습니다.
JCSP 대안의 장점:
사용 예:
다음 Java 코드는 다음을 사용하여 공정한 멀티플렉서를 보여줍니다. JCSP:
import org.jcsp.lang.*; public class FairPlex implements CSProcess { private final AltingChannelInput[] in; private final ChannelOutput out; public FairPlex (final AltingChannelInput[] in, final ChannelOutput out) { this.in = in; this.out = out; } public void run () { final Alternative alt = new Alternative (in); while (true) { final int index = alt.fairSelect (); out.write (in[index].read ()); } } }
추가 참고 사항:
Maven 저장소에 있는 JCSP의 현재 버전은 JCSP 웹 사이트에 명시된 것과 달리 1.1-rc5입니다.
위 내용은 여러 차단 대기열에서 효율적으로 읽기 위해 Go의 'select'와 동일한 Java가 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!