Hintergrund: In der Regierung wurde ein Antragssystem entwickelt. Die Hauptfunktion besteht darin, das Unternehmen die Informationen zur Unternehmensqualifizierung ausfüllen zu lassen und dann die angegebene Formel zu verwenden, um diese Informationsreihe zu zählen und den Regierungsführern in Form von Punktzahlen anzuzeigen. Derzeit füllen 1.300 Unternehmen den Bericht aus. Da die Punktzahl in Echtzeit angezeigt wird, ist die Statistikfunktion langsam.
Code laufender Prozess :
1. Finden Sie 1300 Unternehmensinformationen heraus
2. Traverse 1300 Enterprise -Informationen und berechnen Sie die Bewertungsinformationen jedes Unternehmens. Jedes Unternehmen wird voraussichtlich eine Zeit von 0,3 Sekunden haben. Insgesamt 390 Sekunden. Ursachen Seitanfrage Timeout
3.. Exportieren (mit JXL JAR)
Lösung:
Da es mit dem Geschäft umgeht, ist es notwendig, Threads zu haben, die Werte zurückgeben können. Verwendung: Callable
Laden Sie den Code direkt hoch hoch
1. Der Code, der den Thread aufruft
List <map <String, Objekt >> list = (list <map <String, Objekt >>) map.get ("rows"); int taskSize = 20; // Erstellen Sie einen Thread Pool Executorservice Pool = Ausführende i++) {System.out.println("I enable multithreading lalala");int evgCount = list.size()/taskSize;Callable c = new MyCallable(list.subList(evgCount*i, evgCount*(i+1)),session,staticFlag,declareService,declareMasterService,enterpriseQueryService);// Execute the task and get the Future object Future f = pool.submit(c);listFuture.add(f);}pool.shutdown();// Get the running results of all concurrent tasks List<Map<String, Object>> listResult = new ArrayList<Map<String, Object>>();for (Future f : listFuture) {List<Map<String, Object>> listModel = new ArrayList <map <String, Objekt >> (); try {listModel = (list <map <String, Objekt >>) f.get ();} catch (interruptedException e) {e.printstacktrace ();} catch (excecutionException e) {e.printstacktrace ();} listresult.2. Threadcode
Paket usi.jszx.controller; import java.util.list; import Java.util.map; import Java.util.Concurrent.Callable; Import Javax.servlet.http.httpSession; import org. usi.jszx.service.declaremastersservice; import usi.jszx.service.declareservice; import usi.jszx.service.declareservice; import usi.jszx.service usi.sys.util.constantutil; Klasse mycallable implementiert Callable <Object> {// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- MyCallable (Liste <map <String, Objekt >> Liste, HttpSession -Sitzung, String staticflag, deklareservice deklareservice, deklaremasternservice deklaremasternservice, EnterpriseQueryService EnterprisequeryService) {this.list = this.Sesion = Session; this.staticflag; declareservice; this.declaremastersservice = declaremasterservice; this.terprisequeryService = EnterpriseQueryService;}@oversidepublic -Objekt call () Auslöst Ausnahme {AuthInfo Info = (AuthInfo) Session {Map <string, objekt> maplist = list.get (i); string mainId = maplist.get ("id")+""; declaremastersservice.queryScoremain (maplist.get ("id")+"", info.getRightType (), "Bericht"); // Declaremastersservice.queryScoremain (MainId, info.getRightType (), IsReport); int isdoble = 1; 1; 1; listScore.get (46) .get ("Score")); isDouble = 2;} else if (listScore.size ()> 22) {mapList.put ("socretotal", listScore.get (23) .get ("Score");} if ("3" .equals (staticflag) {für (int j = 0; {if (j <9) {mapList.put ("value0"+(j+1), listScore.get (j*isDouble) .get ("show_value");} else {mapList.put ("value"+(j+1), listScore.get (j*isdouble). mapList.get ("CountyID")+""; if ("340826" .Equals (CountyID) || "341822" .Equals (CountyID)) {mapList.put ("CityName", maplist.get ("CountyName")+");} // Unternehmenstyp String declare_evaluate = maplist.get ("declare_evaluate")+""; if ("1" .equals (declare_evaluate)) {mapList.put ("declare_evaluate_name", "deklaration");} else {maplist.put.put ("declare_evaluate_name", "Evaluation"; maplist.get ("shstatus")+""; if ("9" .equals (shstatus)) {maplist.put ("strshstatus", "entwirr");} else if ("0" .equals (shstatus)) {maplist.put ("Strshstatus", "Enterprise Submission";}; if ("1" .equals (shstatus)) {maplist.put ("strshstatus", "City Review bestanden");} else if ("2" .equals (shstatus) {maplist.put ("strshstatus", "City Review bestanden");} if ("3". Bestanden ");} else if (" 4 ".equals (shstatus)) {maplist.put (" strshstatus "," Provincial Review fehlgeschlagen ");} else if (" 5 ".equals (shstatus)) {MAPLIST.PUT.PUT (" strshstatus "," provincial review ");} elsed (" Strshstatus "," Provincial Review "); if("6".equals(SHSTATUS)){maplist.put("STRSHSTATUS", "Return to enterprise modification");} else if("7".equals(SHSTATUS)){maplist.put("STRSHSTATUS", "City review");} else if("11".equals(SHSTATUS)){maplist.put("STRSHSTATUS", "Modify to deklaration ");} else if (" 12 ".equals (shstatus)) {maplist.put (" strshstatus "," modifizieren Sie die Bewertung ");} if (" 1 ".equals (staticFlag)) {// eine Änderungsmeinungsliste <map <String, Objekt >> listDetail = decrareservice.Queryititogog (Mainid) (Mainid) (Mainid); if (listDetail.size ()> 0) {String audit_opinion = listDetail.get (0) .get ("audit_opinion")+""; if (! Stringutils.isempty (audit_opinion) &&! sonst {mapList.put ("audit_opinion", "");}} // wird es verwendet, um in String orgame = maplist.get ("orgame")+"; String pjname = zu ändern. maplist.get ("pjname")+""; if (stringutils.isempty (pjname) || "null" .equals (pjname) || pjname.equals (orgname)) {maplist.put ("isGengming", "no"); maplist.put ("pjname", "; "Yes"); mapList.put ("pjname_e", pjname);} else if ("2" .equals (staticFlag)) {}} returnlist;} public float grademaster (httpSession Session, String MainId, String orgId, DeclaremAsterService Declaremasters. . gespeichert * */list <map <String, Objekt >> listDetail = declaremasterservice.QueryTaskDetail (HauptID); if ("2" .equals (rightType) || "3" .equals (rightType)) {// String konvertieren in floatFor (int i = 0; i <listetaTaN.Size (); listDetail.get (i); if (stringutils.isempty (map.get ("declare_city_value")+") ||" null ".equals (map.get (" declare_city_value ")+" ") {resultfirst [i] = 0f;} {resultfirst [i] = float.parsefloat (map.get ("declare_city_value")+"");}}} else {// String konvertieren Sie String in floatfor (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;} {resultfirst [i] = float.parsefloat (map.get ("declare_province_value")+"");}}} map <String, Object> Enterprise = EnterpriseQueryService.getInfobyorgid (orgid) .get (0); // Berechnen Sie den Wert nach dem Calculationsformeln des Evaluierungsindex des Evaluierungsindex des Anhui -Enterprise -Technologiezentrums. Der nächste Schritt besteht darin, das Score Float -Ratio1 = 0F; Float Ratio2 = 0F; Float Ratio3 = 0F; Try {Ratio1 = Float.Parsefloat (Enterprise.get ("Ratio1")+"); float.Parsefloat (Enterprise.get ("Ratio3")+"");} catch (Exception E) {} map <String, Objekt> map = declarecontroller.getValue (resultfirst, rettio1, Ratio2, Ratio3); Float [] resultValue = (Float []) Map.Get ("resultValue"); map.get ("resultcoreValue"); float [] resultcore = declarecontroller.getScore (resultcoreValue); float scoretotal = 0f; list <map <String, Objekt >> listScore = declaremasternService.queryscoredic (); for (int i = 0; Scoremain (); scoremain.setmainid (mainId); scoremain.setsCorename (listScore.get (i) .get ("Score_name")+""); scoremain.setsCoreUnit (listScore.get (i) .get ("Score_unit")+""); scoremain.setscoregewicht (listScore.get (i) .get ("Score_weight")+""); scoremain.setscoregewicht (listScore.get (i) .get ("Score_weight")+""); scoremain in.setDisorder (listScore.get (i) .get ("dis_order")+""); scoremain.setshowValue (resultValue [i]+""); scoremain.setsCoreValue (resultcoreValue [i]+""); scoremain.setscore (resultscore [i]+""); declaremastersservice.inserscoremain (scoremain); scoretotal += resultcore [i];} return scoretotal;}}HINWEIS: MyCallable ist nur eine komplizierte Art, Geschäfte zu behandeln. Es kann ignoriert werden und beschleunigen schließlich von 390 Sekunden auf 40 Sekunden.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über das Beispiel für den Lösungscode-Beispiel für die Ausführung und Verarbeitungszeit von Java Multi-Threaded zu lang. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!