Antecedentes: se ha desarrollado un sistema de aplicación en el gobierno. La función principal es permitir que la empresa complete la información de calificación empresarial, y luego usar la fórmula dada para contar esta serie de información, y mostrarla a los líderes gubernamentales en forma de puntajes. Actualmente, 1.300 empresas completan el informe. Dado que la puntuación se muestra en tiempo real, la función estadística es lenta.
Proceso de ejecución del código :
1. Encuentre 1300 información corporativa
2. Traverse 1300 Información empresarial y calcule la información de puntaje de cada empresa. Se espera que cada compañía tenga un tiempo de 0.3 segundos. Total 390 segundos. Tiempo de espera de solicitud de la página causa
3. Exportación (usando JXL JAR)
Solución:
Dado que maneja el negocio, es necesario tener hilos que puedan devolver valores. Uso: Callable
Cargue directamente el código
1. El código que llama al hilo
List <map <string, object >> list = (list <map <string, object >>) map.get ("Rows"); int tareas = 20; // Cree un grupo de hilo EjecutorService Pool = Ejecutors.NewFixedThreadPool (tareas de tareas); // Cree múltiples tareas con la lista de valores de retorno <Euthure> listFuture = new ArrayList <Exture> (); for (int i = 0; i <i = 0; i <i = i <i = i <ii <i = i <Itsye; {System.out.println ("I habilité multithreading lalala"); int evgCount = list.size ()/tareas de tareas; callable c = new mycallable (list.sublist (evgcount*i, evgCount*(i+1), sesión, staticflag, DeclElHaresservice, DeclTarMasterService, EnterpriseQuereSequerySeQuereSequereSequereS); Objeto futuro futuro f = agrio.submit (c); listFuture.add (f);} prow.shutdown (); // Obtenga los resultados en ejecución de todas las tareas concurrentes list <map <string <string >> listresult = new ArrayList <map <string, objeto >> (); para (futuro f: listfuture) {list <string <string >> listmodely = new ArtleList. Objeto >> (); try {listModel = (list <map <string, object >>) f.get ();} catch (interruptedException e) {E.PrintStackTrace ();} Catch (ExecutionException e) {E.PrintStackTRace ();} listresult.addall (listModel);} map.put ("rows", listressistRessUlt;2. Código de hilo
paquete usi.jszx.controller; import java.util.list; import java.util.map; import java.util.concurrent.callable; import javax.servlet.http.httpsession; importar org.apache.commons.lang3.stringutils; usi.jszx.service.DeclarMasterService; import usi.jszx.service.DeclareService; import usi.jszx.service.DeclareService; import usi.jszx.service.EnterprisequeryService; import usi.sys.dto.authinfo; importar; import usi.sys.util.constantutil; clase myCallable implementa callable <ject> {// --------------------------------------------------------------------------- --------------------------------------------------------------------------- MyCallable (list <map <string, object >> list, httpsession session, string staticFlag, declareService DeclareService, DeclareMasterService DeclareMasterService, EnterprisequeryService EnterprisequeryService) {this.list = list; this.session = session; this.staticflag = staticflag; this.DeclaReService) DeclareService; this.DeclarEMasterService = declareMasterService; this.EnterPrisequeryService = EnterpriseQueryService;}@overRidePublic Object Call () lanza la excepción {AuthInfo Info = (AuthInfo) Session.getAttribute (ConstantUtil.auth_info); para (int i = 0; i <list. {Map <string, object> mapList = list.get (i); string mainid = mapList.get ("id")+""; this.gradeMaster (session, mainid, mapList.get ("orgid")+"", DeclarEMSterService, EnterpriseQueryService); Listar <String <String, Object >> listscore = = declareMasterService.queryScoremain (mapList.get ("id")+"", info.getRightType (), "informe"); // declareMasterSerService.queryScoremain (MainID, info.getIntightType (), isReport); int is is is is iss listScore.get (46) .get ("stork")); isDouble = 2;} else if (listscore.size ()> 22) {mapList.put.put ("socretotal", listscore.get (23) .get ("score"));} if ("3" .equals (staticflag)) {para (int j = 0; j <33; j ++) {if (j <9) {mapList.put ("value0"+(j+1), listscore.get (j*isDouble) .get ("show_value"));} else {mapList.put ("valor"+(j+1), listscore.get (j*isDouble) .get ("show_value"); maplist.get ("CountyID")+""; if ("340826" .equals (CountyID) || "341822" .Equals (CountyID)) {mapList.put ("CityName", mapList.get ("Countyname")+"");} // String de tipo corporativo Declare_evaluate = mapList.get ("declare_evaluate")+""; if ("1" .equals (declare_evaluate)) {mapList.put ("declare_evaluate_name", "Declaración");} else {mapList.put ("declare_evaluate_name", "evaluación");} // status shstatus = mapList.get ("shstatus")+""; if ("9" .equals (shstatus)) {mapList.put ("strshstatus", "borrador");} else if ("0" .equals (shstatus)) {mapList.put ("strshstatus", "envío entero");} if ("1" .equals (shstatus)) {mapList.put ("strshstatus", "revisión de la ciudad aprobada");} else if ("2" .equals (shstatus)) {mapList.put.put ("strshstatus", "revisión de la ciudad");} el más if ("3" .equals (shstatus)) {maplist.put (fut (fut ("," ",", "," ", provincia, provental. Aprobado ");} else if (" 4 ".equals (shstatus)) {maplist.put (" strshstatus "," revincial revisión fallida ");} else if (" 5 ".equals (shstatus)) {maplist.put (" strshstatus "," revisión provincial ");} if ("6" .equals (shstatus)) {mapList.put ("strshstatus", "return a la modificación empresarial");} else if ("7" .equals (shstatus)) {mapList.put ("strshstatus", "revisión de la ciudad");} else if ("11" .equals (shstatus)) {maplist.put.tat ("," ",", ",", ",", ",", ",", ",", ",", "," " "Modificar a la declaración");} else if ("12" .equals (shstatus)) {mapList.put ("strshstatus", "modificar a la evaluación");} if ("1" .equals (staticflag)) {// Agregar una lista de opinión de modificación <Map <String, objeto >> listedetail = DeglAsService.queryUsyUsSUditLog (MainId); if (listDetail.size ()> 0) {String audit_opinion = listDetail.get (0) .get ("audit_opinion")+""; if (! else {mapList.put ("audit_opinion", "");}} // ¿Se puede cambiar a string orgname = mapList.get ("orgname")+""; string pjname = mapList.get ("pJname")+""; if (stringUtils.isEmpty (pjname) || "null" .equals (pjname) || pjname.equals (orgname)) {mapList.put ("isGengming", "no"); maplist.put ("pjname_e", ");} else{maplist.put("ISGENGMING", "Yes");maplist.put("PJNAME_E", PJNAME);} else if("2".equals(staticFlag)){}} return list;}public float gradeMaster(HttpSession session,String mainId,String orgId,DeclareMasterService declareMasterService,EnterpriseQueryService EnterprisequeryService) {AuthInfo Info = (AuthInfo) session.getAttribute (constantUtil.auth_info); string righttype = info.getTrightType (); declareMasterSerService.deletescoremain (mainID); float [] standingfirst = new float [100];/** Primera Quera All the List of AppEndix* La ubicación de la lista* está directamente al lugar para verlo directamente. Los datos principales de la tabla * * Desde la revisión se ha realizado, los datos de la tabla principal deben almacenarse * */list <map <string, object >> listDetail = declareMasterService.QueryTaskDetail (mainID); if ("2" .equals (righttype) || "3" .equals (derecha type)) {// Convert string a floatfor (int i = 0; ii <ii <INY <INYSITS (RightType))))))) i ++) {map <string, object> map = listDetail.get (i); if (stringUtils.isEmpty (map.get ("declare_city_value")+"") || "null" .equals (map.get ("declarar_city_value")+"")) {resultante [i] = 0f;} más {resultfirst [i = = float.parsefloat (map.get ("declare_city_value")+"");}}} else {// Convertir cadena a flotación (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 ("declarar_province_value")+"")) {resultFirst [i] = 0f;} else {resultante [i] = float.parsefloat (map.get ("declare_province_value")+"");}}} map <string, object> Enterprise = EnterprisequeryService.getInfobyorgid (Orgid) .get (0); // Calcule el valor de acuerdo con la fórmula de cálculo del índice de evaluación del Centro de tecnología Enterprise ANHU. El siguiente paso es calcular la relación de float de puntaje1 = 0f; flotat ratio2 = 0f; float ratio3 = 0f; try {ratio1 = float.parsefloat (empresario.get ("ratio1")+""); ratio2 = float.parsefloat (Enterprise.get ("ratio2")+"); ratio3 = float.parsefloat (empresarial.get ("ratio3")+"");} catch (excepción e) {} map <string> map = declareController.getValue (Ratio1, Ratio2, Ratio3); Float [] ResultValue = (Float []) Map.get ("ResultValue"); Float [] (float []) map.get ("ResultScorevalue"); float [] ResultScore = DeclareController.getScore (ResultsCorevalue); float scoretotal = 0f; list <map <string, object>> listScore = DeclarEmasterService.QuerySy scoremain = new ScorErain (); scoremain.setMainid (mainid); scoremain.setscorename (listscore.get (i) .get ("score_name")+""); scoremain.setscoreUnit (listscore.get (i) .get ("scAing_unit")+""); scoremain.setscoreweight (listscore.get (i) .get ("score_weight")+""); scoremain.setscoreweight (listscore.get (i) .get ("score_weight")+""); ScorErain in.setDisorder (listscore.get (i) .get ("dis_order")+""); scoremain.setShowValue (ResultValue [i]+""); scoremain.setscorevalue (Resultscorevalue [i]+""); scoremain.setscore (Resultscore [i]+""); declareMasterService.inserscoremain (Scoremain); Scoretotal += ResultScore [i];} return Scoretotal;}}Nota: MyCallable es solo una forma complicada de manejar negocios. Se puede ignorar y finalmente acelerar de 390 segundos a 40 segundos.
Resumir
Lo anterior es todo el contenido de este artículo sobre el ejemplo del código de solución de Java Multi-Threaded Ejecución y procesamiento de tiempo comercial de procesamiento durante demasiado tiempo. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!