Antecedentes: Um sistema de aplicação foi desenvolvido no governo. A principal função é permitir que a empresa preencha as informações da qualificação corporativa e, em seguida, use a fórmula fornecida para contar esta série de informações e exibi -las aos líderes do governo na forma de pontuações. Atualmente, 1.300 empresas preenchem o relatório. Como a pontuação é exibida em tempo real, a função de estatística é lenta.
Processo de execução de código :
1. Descubra 1300 informações corporativas
2. Traverse 1300 Informações corporativas e calcule as informações de pontuação de cada empresa. Espera -se que cada empresa tenha um tempo de 0,3 segundos. Total de 390 segundos. Causa o tempo limite da solicitação de página
3. Exportar (usando JXL Jar)
Solução:
Como lida com os negócios, é necessário ter threads que possam retornar valores. Uso: chamável
Faça o upload diretamente do código
1. O código que chama o tópico
List <map <string, objeto >> list = (list <pp <string, object >>) map.get ("linhas"); int taskSize = 20; // Crie um pool de threads executores Service pool = executores.newfixedthreadpool (taskSize); // crie múltiplas tarefas com listar de retorno <tutures> listfuture = newrAyList <Future> (); {System.out.println ("Eu habilitei a Lalala Multithreading"); int evgCount = list.size ()/TaskSize; Callable C = new MyCallable (List.sublist (EVGCount*I, EVGCount*(i+1), Sessty, SSTATSFLAG,, Declarervice, Decl); o objeto futuro futuro f = pool.submit (c); listfuture.add (f);} pool.shutdown (); // obtenha os resultados em execução de todas as tarefas simultâneas listar <map <string, object>> listresult = new ArrayList <pap <pp, object> (); para (lister f: listfuture) {list <map <map <map <pp, objeto>> Objeto >> (); tente {listModel = (list <map <string, object >>) f.get ();} catch (interruptEdException e) {e.printStacktrace ();} catch (executionException e) {e.printStacktrace ();} listresult.addall (listModel);};2. Código do tópico
pacote usi.jszx.controller; importar java.util.list; importar java.util.map; importar java.util.Concurrent.Callable; importar javax.Servlet.http.httpession; import orgache.commons.lang3.strinuteLs; usi.jszx.service.DeclaremasterService; importar usi.jszx.service.declareserservice; importar usi.jszx.service.declareService; import USI.jszx.service.enterPriseEforyService; importi.sysys.di.jsy.jszto.service.EnterQuerySertice; usi.sys.util.Constantutil; Classe MyCallable implemáveis Callable <Object> {// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- MyCallable (Lista <mapa <string, objeto >> Lista, sessão httpSession, string staticflag, declara o servidor de declara, declara -mestreerservice declaraMasterService, EnterpriseQueryService EnterPriseQueryService) {this.list = list; DeclareService; this.DecLaremasterService = DecLaremasterService; this.EnterpriseQueryService = EnterpriseQueryService;}@substituição de objeto de substituto () lança (constantutil.auth_info); {Map <string, object> mapList = list.get (i); string mainId = mapList.get ("id")+""; this.grademaster (sessão, mainId, mapList.get ("orgid")+"", declaransasterService, EnterpriseQuerService); list <pap <string, objeto>> DeclaremasterService.QueryScoremAin (mapList.get ("id")+"", info.getrighttype (), "report"); // declaremasterservice.QueryScoremain (mainId, info.getttype (), isReport); intdouble = 1; if (listscore.size.size (),), IsReport); listsCore.get (46) .get ("score")); isdouble = 2;} else if (listscore.size ()> 22) {mapList.put ("soctotal", listscore.get (23) .get ("score"));} if ("3" .Equals (staticflag)). {if (j <9) {mapList.put ("value0"+(j+1), listsCore.get (j*isdouble) .get ("show_value"));} else {mapList.put ("value"+(j+1), listsCore.get (jegum} }/get). MapList.get ("CountyId")+""; if ("340826" .Equals (CountyId) || "341822" .Equals (CountyId)) {mapList.put ("CityName", mapList.get ("countyname")+"");} // tipo corporativo String declare_evalado = mapList.get ("declara_evaluate")+""; if ("1" .equals (declara_evaluate)) {mapList.put ("declara_evaluate_name", "declarações");} else {mapList.put ("declara_evaluate_stame");} else {mapList.put.put ("declara_evaluate_stame");}; mapList.get ("shstatus")+""; if ("9" .equals (shstatus)) {mapList.put ("strshstatus", "draft");} else ("0" .equals (shstatus)) {mapList. ("strshstatus" .equals (shstatus)) {mapList. ("strshstatus", "EnterPrise Submission"); if ("1" .equals (shstatus)) {mapList.put ("strshstatus", "revisão da cidade passada");} else if ("2" .equals (shstatus)) {mapList.put ("strshstatus", "city review passed");} se ("3". "Revisão provincial aprovada");} else if ("4" .Equals (shstatus)) {mapList.put ("strshstatus", "revisão provincial falhou");} else if ("5" .equals (shstatus)) {mapList. ("strshstatus" .equals (shstatus)) {mapList. ("strshstatus". Equals (shstatus)) {mapList. ("strshstatus". Equals (revisão "; if ("6" .equals (shstatus)) {mapList.put ("strshstatus", "retorne à modificação corporativa");} else if ("7" .equals (shstatus)) {mapList.put ("strshstatus", "city review)); else (" 11 ". "Modificar para declarar");} else if ("12" .equals (shstatus)) {mapList.put ("strshstatus", "modificar para avaliar");} if ("1" .equals (staticflag)) {// Adicione uma lista de modificação <mapa <string, object>> listDetail = sinClaraUraReReReReReRe) {// adicione uma lista de modificação <pyer <string, object >> if (listDetail.size ()> 0) {String audit_opinion = listDetail.get (0) .get ("audit_opinion")+""; if (! stringUtils.isEmpty (audit_opinion) &&! "null" .equals (auditinion), {mapList) &&! else {mapList.put ("audit_opinion", "");}} // é usado para ser alterado para string orgname = mapList.get ("orgname")+""; string pjName = MapList.get ("pjName")+""; if (stringutils.isEmpty (pjName) || "null" .equals (pjName) || pjname.equals (orgname)) {mapList.put ("isGengming", "no"); mapLame)) {"pjname_e" else {mapList.put ("isgengming", "sim"); mapList.put ("pjname_e", pjname);} else if ("2" .equals (staticflag)) {}} list de retorno;} public float (htsttsession session, stractId, stratidrid, orgid; EnterPriseQueryService) {authinfo info = (authinfo) session.getAttribute (constantutil.auth_info); string righttype = info.getrighttype (); DeclaremasterService.DeletesCeMain (MainId); o primeiro aço do float. Os dados da tabela principal * * Como a revisão foi feita, os dados da tabela principal devem ser armazenados * */list <map <string, object >> listDetail = DeclaremasterService.QueryTaskDetail (mainId); if ("2" .Equals (stringspe) || "3. i ++) {map <string, object> map = listdetail.get (i); if (stringUtils.isEmpty (map.get ("declara_city_value")+"") || "null" .equals (map.get ("declara_city_value")+")) {resultadofirst [i] = 0f; float.parsefloat (map.get ("declara_city_value")+"");}}} else {// converte string para flutuar (int i = 0; i <listDetail.size (); i ++) {map <string, object> map = listDetail.get(i);if(StringUtils.isEmpty(map.get("DECLARE_PROVINCE_VALUE")+"")||"null".equals(map.get("DECLARE_PROVINCE_VALUE")+"")){resultFirst[i]=0f;} else{resultFirst[i] = float.parsefloat (map.get ("declara_province_value")+"");}}} map <string, object> Enterprise = EnterpriseQueryService.getInfobyorgid (orgid) .get (0); // calcule o valor de acordo com a fórmula de cálculo da avaliação do Annhui ANHUi. A próxima etapa é calcular a proporção de flutuação de pontuação1 = 0f; razão de flutuação2 = 0f; razão de flutuação3 = 0f; tente {ratio1 = float.parsefloat (Enterprise.get ("ratio1")+""); ratio2 = float.parsefloat (Enterprise.get.get ("ratio2"); Float.Parsefloat (Enterprise.get ("ratio3")+"");} catch (Exceção e) {} map <string, object> map = DeclareController.getValue (resultadofirst, ratio1, ratio2, ratio3); float [] resultValue = (float []), " map.get ("ResultsCoreValue"); float [] ResultsCore = DeclareController.getScore (ResultsCoreValue); float scoretotal = 0f; list <map <string, object >> listsCore = DeclaremasterService.QueryScoredic (); para (int i = 0; i <listscore.sCore.S.S.SIZE () (); Scoremain (); scoremain.setMainId (mainID); scoremain.setsCorename (listscore.get (i) .get ("score_name")+""); scoremain.setsCoreUnit (listscore.get (i) .get ("score_unit")+""); scoremain.setsCoreWeight (listscore.get (i) .get ("score_weight")+""); scoremain.setsCoreWeight (listscore.get (i) .get ("score_weight")+""); scoremain in.setDisorder (listscore.get (i) .get ("dis_order")+""); scoremain.SetShowValue (resultado [i]+""); scoremain.SetSCOREVALUE (ResultadoCoreValue [i]+""); scoremain.SetSCore (Resultado [i]+""); DecLaremasterService.inserScoremain (Scoremain); scoretotal += ResultadoCore [i];} retornar scoretotal;}}Nota: MyCallable é apenas uma maneira complicada de lidar com negócios. Pode ser ignorado e finalmente acelerar de 390 segundos para 40 segundos.
Resumir
O exposto acima é o conteúdo inteiro deste artigo sobre o exemplo de código da solução da execução multi-thread Java e processando o tempo dos negócios por muito tempo. 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!