Este artigo explora principalmente o uso de Java Concorrente Programação Callable e Future, e compartilha códigos de exemplo relevantes, e os detalhes são os seguintes.
Todos sabemos que existem duas maneiras de implementar multi-threading. Um é herdar threads e o outro é implementar o Runnable. No entanto, essas duas maneiras têm um defeito, e o resultado de retorno não pode ser obtido após a conclusão da tarefa. Para obter o resultado de retorno, você deve usar o chamável. A tarefa chamada pode ter um valor de retorno, mas não pode obter diretamente o valor de retorno da tarefa chamada; Se você deseja obter o valor de retorno da tarefa chamada, precisará usar o futuro. Portanto, tarefas chamáveis e modo futuro geralmente são usados em combinação.
Imagine um cenário: você precisa de uma interface de lista de postagens. Além de devolver a lista de postagens, você também precisa retornar a lista e a lista de comentários de cada postagem. Para cálculos de 10 postagens em uma página, essa interface requer acesso ao banco de dados 21 vezes. Depois de acessar o banco de dados, é calculado com base em 100ms, 21 vezes e o tempo cumulativo é de 2,1s. Esse tempo de resposta é provavelmente insatisfatório. O que fazer? Transformação assíncrona de interfaces.
Depois de descobrir a lista de postagens, iterar na lista de postagens, inicie 10 threads no loop e obtenha simultaneamente a lista semelhante de cada postagem e, ao mesmo tempo, 10 threads são configurados para obter a lista de comentários de cada postagem. Após essa transformação, o tempo de resposta da interface é bastante reduzido para 200ms. Neste momento, precisamos usar o Callabel combinado com o futuro para alcançá -lo.
Lista privada <fosTresponse> CreatePosTRESPONSELIST (Página <PosTRESPONSE> Página, String final UserID) {if (Page.getCount () == 0 || Page == NULL || Page.getList () == NULL) {return null; } // Obtenha a lista de postagens <fosTRESPONSE> CircleSponsElist = Page.getList (); int size = CircleSponsElist.size (); ExecutorService CommentPool = executores.newfixedthreadpool (tamanho); ExecutorService SupportPool = executores.newfixedThreadpool (tamanho); tente {list <tuture> commentFutureList = new ArrayList <Future> (tamanho); if (CircleSPOnselist! = NULL && CircleSponselist.size ()> 0) {for (pós -resposta pós -resposta: circleSponselist) {final string circil = postSponse.getId (); Final String PostUserID = PosTRESPOnse.getUserId (); // Verifique a lista de comentários Callable <List <CircleReViews>> CALLABLECOMENT = NOVO Callable <List <CircleReViews>> () {@Override public List <CircleReViews> Call () lança exceção {Return CircleReViewSbiz.getPosComments (CircleId); }}; Future F = CommentPool.submit (CallableComment); CommentFutureList.add (F); // Verifique a lista semelhante Callable <List <Circcerzan>> callablesupport = new Callable <List <Circirzan>> () {@Override Public List <Circirzan> Call () lança exceção {return Circcirzanbiz.findlist (CircleID); }}; Future SupportFuture = SupportPool.subMit (CallableSupport); CommentFutureList.add (SupportFuture); }} // Obtenha os resultados da execução de todas as tarefas simultâneas int i = 0; Pós -resposta temp = nulo; for (Future F: CommentFutureList) {temp = CircleSponselist.get (i); Temp.SetCommentList ((List <CircleReViews>) f.get (); temp.SetSupportList ((List <Circcirzan>) f.get (); CircleSponselist.set (i, temp); i ++;}} catch (Exception e) {E.PrintStackTrace (); Finalmente {Finalmente {}; supportpool.shutdown ();Resumir
O exposto acima é o conteúdo inteiro deste artigo sobre o código de exemplo do aplicativo de programação simultânea Java Callable and Future. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!