الخلفية: تم تطوير نظام التطبيق في الحكومة. تتمثل الوظيفة الرئيسية في السماح للمؤسسة بملء معلومات مؤهلة المؤسسة ، ثم استخدام الصيغة المحددة لحساب هذه السلسلة من المعلومات ، وعرضها على قادة الحكومة في شكل درجات. حاليا ، 1300 شركة تملأ التقرير. منذ عرض النتيجة في الوقت الحقيقي ، تكون وظيفة الإحصائيات بطيئة.
عملية تشغيل الكود :
1. اكتشف 1300 معلومات الشركة
2. Traverse 1300 Enterprise معلومات وحساب معلومات الدرجات لكل مؤسسة. من المتوقع أن يكون كل شركة وقتًا قدره 0.3 ثانية. المجموع 390 ثانية. يسبب مهلة طلب الصفحة
3. التصدير (باستخدام جرة JXL)
حل:
نظرًا لأنه يتولى الأعمال التجارية ، فمن الضروري أن يكون لديك مؤشرات ترابط يمكنها إرجاع القيم. استخدام: قابلة للاتصال
قم بتحميل الكود مباشرة
1. الرمز الذي يدعو الموضوع
قائمة <map <string ، object >> list = (list <map <string ، object >>) map.get ("rows") ؛ int tasksize = 20 ؛ // إنشاء تجمعات تجمع مؤشرات ترابط executorservice pool = executors.newFixedThreadPool (taskizize) ؛ // إنشاء مهام متعددة مع قائمة قيم الإرجاع <Sute> list = new raillist <المستقبل {system.out.println ("أنا أمكّن multithreading lalala") ؛ int evgcount = list.size ()/tasksize ؛ كائن مستقبلي مستقبلي f = pool.submit (c) ؛ listfuture.add (f) ؛} pool.shutdown () ؛ // الحصول على نتائج التشغيل لجميع قائمة المهام المتزامنة <map <string ، object >> listresult = new arraylist <map ، object >> () ؛ Object >> () ؛ Try {listmodel = (list <map <string ، object >>) f.get () ؛} catch (interruptedException e) {2. رمز الموضوع
package usi.jszx.controller ؛ import java.util.list ؛ import java.util.map ؛ import java.util.concurrent.callable ؛ import javax.servlet.http.httpsession ؛ import org.apache.lang.lang3.StringUtils ؛ usi.jszx.service.declaremasterservice ؛ import usi.jszx.service.declareservice ؛ import usi.jszx.service.declareservice ؛ import usi.jszx.service.enterpriseeryservice ؛ usi.sys.util.constantutil ؛ class mycallable الأدوات القابلة للاتصال <boung> {// --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ myCallable (قائمة <map <string ، object >> قائمة ، جلسة httpsession ، سلسلة staticflag ، إعلان الإعلان عن الخدمات ، إعلان الإعلان عن الخدمات ، eventprisequeryservice eventpriseervice) Enclareservice ؛ this.declaremasterService = DeclaremasterService ؛ this.enterprisequeryservice = Enterprisequeryservice ؛}@outpressepublic call () استثناء {uperinfo info = (uperinfo) session.getAttribute (constantutil.auth_info) ؛ for (IN I = 0 ؛ {map <string ، object> maplist = list.get (i) ؛ string mainId = mapList.get ("id")+"" ؛ this.grademaster (Session ، mainid ، maplist.get ("orgid")+"" ، ExclareMasterService ، Enterpriseervice) ؛ list <string ، object >> listscore = DescerMasterService.queryscoremain (maplist.get ("id")+"" ، info.getRightType () ، "Report") ؛ // DectRemasterService.queryscoremain (MainId ، info.getRightype () ، isReport) ؛ listscore.get (46) .get ("SCORE")) ؛ iSdouble = 2 ؛} آخر إذا (listscore.size ()> 22) {maplist.put ("socretotal" ، 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 (j*isdouble) .get ("show_value") ؛ MapList.get ("CountyId")+"" ؛ if ("" 340826 ".equals (CountyId) ||" 341822 ".equals (CountyId)) {mapList.put (" cityName "، maplist.get (" countyName ")+") ؛} // corporate type string declare_evalate = maplist.get ("DECRARE_EVALTITE")+"" ؛ if ("1" .equals (DECRINE_EVALTITE)) {mapList.put ("declare_evalate_name" ، "disclaration) ؛} else {maplist.put (" denare_evalate_name "،" التقييم ") ؛ mapList.get ("shstatus")+"؛ if (" 9 ".equals (shstatus)) {maplist.put if ("1" .equals (shstatus)) {mapList.put ("strshstatus" ، "مراجعة المدينة") ؛} آخر إذا ("2" .equals (shstatus)) {maplist.put ("strshstatus" ، "مراجعة المدينة") ؛} تم تمريره ") ؛} آخر إذا (" 4 ".equals (shstatus)) {mapList.put (" strshstatus "،" فشل المراجعة الإقليمية ") ؛} أخرى إذا (" 5 ". إذا ("6" .equals (shstatus)) {mapList.put ("strshstatus" ، "العودة إلى تعديل المؤسسة") ؛} آخر إذا ("7" .equals (shstatus)) {maplist.put ("strshstatus" ، "City Review") ؛ إعلان ") ؛} آخر إذا (" 12 ".equals (shstatus)) {mapList.put (" strshstatus "،" تعديل إلى التقييم ") ؛} if (" 1 ".equals (staticflag)) {// إضافة قائمة رأي التعديل <map ، objectdeTail = declareservice.queryaudlog (mainid) ؛ if (listDetail.size ()> 0) {String Audit_opinion = listDetail.get (0) .get ("Audit_opinion")+"؛ if (! stringUtils.isempty (Audit_opinion) &&! آخر {mapList.put ("Audit_opinion" ، "") ؛}} // هل يتم تغييره إلى السلسلة orgname = mapList.get ("orgname")+"؛ string pjname = maplist.get ("pjname")+"؛ if (stringUtils.isempty (pjname) ||" null ".equals (pjname) || pjname.equals (orgname)) "نعم") ؛ maplist.put ("pjname_e" ، pjname) ؛} آخر إذا ("2" .equals (staticflag)) {}} (AuthInfo) session.getAttribute (constantutil.auth_info) ؛ string righttype = info.getRightType () ؛ DecrateMasterService.deleteScorEmain (MainId) يجب تخزينه * */list <map <string ، object >> listDetail = DecresMasterService.queryTaskDetail (mainId) ؛ if ("2" .equals (rightType) || "3" .equals (rightType)) {// تحويل السلسلة إلى floatfor (int i = 0 ؛ i <listedeail.size () ؛ listDetail.get (i) ؛ if (stringUtils.isempty (map.get ("denare_city_value")+"") || float.parsefloat (map.get ("DESCRE_CITY_VALUE")+"") ؛}}} آخر {// تحويل السلسلة إلى floatfor (int i = 0 ؛ i <listdetail.size () ؛ i ++) {map ، object> map = listDetail.get (i) ؛ if (stringUtils.isempty (map.get ("denare_province_value")+") || float.parsefloat (map.get ("DEST_PROVINCE_VALUE")+"") ؛}}} الخريطة <string ، Object> Enterprise = Enterprisequeryservice.getInfobyorgid (Orgid) .get (0) ؛ والخطوة التالية هي حساب نسبة تعويم النتيجة 1 = 0f ؛ نسبة التعويم 2 = 0f ؛ ratiO3 = 0f ؛ try {ratio1 = float.parsefloat (Enterprise.get ("ratiO1")+") ؛ ratiO2 = float.parsefloat (Enterprise.get (" ratio2 ")+") float.parsefloat (Enterprise.get ("ratio3")+") ؛} catch (استثناء e) {} map <string ، object> map = decrecontroller.getValue (resultfirst ، ratio1 ، ratio2 ، ratio3) ؛ float [] resultvalue = (float []) map.get ( (float []) map.get ("resultscorevalue") ؛ float [] resultscore = decrecontroller.getScore (resultscorevalue) ؛ float scoretotal = 0f ؛ list <map <string ، object >> listscore = declaremasterservice.queryscoredic (for int i = 0 ؛ scoremain = new 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 (resultValue [i]+"") ؛ scoremain.setscorevalue (ResultsCorevalue [i]+"") ؛ scoremain.setscore (النتائج [i]+"") ؛ DeclaremasterService.inserscoremain (Scoremain) ؛ ScoreTotal += Resultscore [i] ؛} إرجاع scoretotal ؛}}ملاحظة: MyCallable هي مجرد وسيلة معقدة للتعامل مع الأعمال. يمكن تجاهله ، وأخيراً تسريع من 390 ثانية إلى 40 ثانية.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة حول مثال رمز الحل على تنفيذ Java متعدد الخيوط ومعالجة وقت العمل لفترة طويلة. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!