이 기사는 주로 Java 동시 프로그래밍 호출 및 미래의 사용을 탐구하며 관련 예제 코드를 공유하며 세부 사항은 다음과 같습니다.
우리는 모두 멀티 스레딩을 구현하는 두 가지 방법이 있다는 것을 알고 있습니다. 하나는 스레드를 상속하고 다른 하나는 실행 가능한 구현입니다. 그러나이 두 가지 방법 모두 결함이 있으며 작업이 완료된 후에는 반환 결과를 얻을 수 없습니다. 반환 결과를 얻으려면 Callable을 사용해야합니다. 호출 가능한 작업은 반환 값을 가질 수 있지만 호출 가능한 작업에서 반환 값을 직접 얻을 수는 없습니다. 호출 가능한 작업의 반환 가치를 얻으려면 미래를 사용해야합니다. 따라서 호출 가능한 작업 및 미래 모드는 일반적으로 조합으로 사용됩니다.
시나리오를 상상해보십시오. 게시물 목록 인터페이스가 필요합니다. 게시물 목록을 반환하는 것 외에도 각 게시물의 Like List 및 주석 목록을 반환해야합니다. 페이지에 10 개의 게시물을 계산하려면이 인터페이스는 데이터베이스에 21 번 액세스해야합니다. 일단 액세스하면 데이터베이스가 100ms, 21 배에 따라 계산되며 누적 시간은 2.1s입니다. 이 응답 시간은 아마도 불만족 일 것입니다. 무엇을해야합니까? 인터페이스의 비동기 변환.
게시물 목록을 찾은 후 게시물 목록을 반복하고 루프에서 10 개의 스레드를 시작하고 각 게시물의 같은 목록을 동시에 얻으 며 동시에 각 게시물의 주석 목록을 얻기 위해 10 개의 스레드가 설정됩니다. 이 변환 후, 인터페이스의 응답 시간은 200ms로 크게 단축됩니다. 현재 우리는 Callabel을 사용하여 미래와 결합해야합니다.
개인 목록 <POSTRESPONSE> CreatePOSTRESPONSELIST (Page <PostResponse> 페이지, 최종 문자열 userID) {if (page.getCount () == 0 || page == null || page.getList () == null) {return null; } // 게시물 목록을 가져옵니다. <POSTRESPONSE> CIRCLERESPONSELIST = page.getList (); int size = circleresponselist.size (); ExecutorService CommentPool = Executor.NewFixedThreadPool (크기); ExecutorService supportPool = Executor.NewFixedThreadPool (크기); {list <future> commentfuturelist = new arraylist <future> (size)를 시도하십시오. if (circleresponselist! = null && circleresponselist.size ()> 0) {for (postresponse postresponse : circleresponseList) {final string circleId = postresponse.getId (); 최종 문자열 postuserid = postresponse.getUserId (); // 주석 목록을 확인합니다 <slist <circlereviews >> callableComment = new Callable <CirclerEviews >> () {@override public list <circlereviews> call () exception {return circlereviewsbiz.getpostomments (circleId); }}; Future F = CommentPool.Submit (CallableComment); CommentFuturelist.add (f); // 같은 목록을 확인합니다 <slist <circlezan >> callablesupport = new Callable <list <circlezan >> () {@override public list <clistzan> call ()이 예외 {return circlezanbiz.findlist (CircleId); }}; 미래의 supportFuture = supportPool.Submit (CallablesUpport); CommentFuturelist.add (supportFuture); }} // 모든 동시 작업의 실행 결과를 가져옵니다 int i = 0; PostREPONSE TEMP = NULL; for (future f : commentfuturelist) {temp = circleresponselist.get (i); temp.setCommentList ((List <CirclerEviews>) f.get (); temp.setSupportList ((List <CircleZan>) f.get (); circleresponselist.set (i, temp); i ++;}} catch (exceptpool.set (i, temp);}} catch (excepool.) supportPool.shutdown ()} CirClerEponsElist};요약
위는 Java Concurrent Programming Callable 및 Future의 응용 프로그램 예제 코드에 대한이 기사의 전체 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!