Latar belakang: Suatu sistem aplikasi telah dikembangkan di pemerintahan. Fungsi utama adalah membiarkan perusahaan mengisi informasi kualifikasi perusahaan, dan kemudian menggunakan formula yang diberikan untuk menghitung serangkaian informasi ini, dan menampilkannya kepada para pemimpin pemerintah dalam bentuk skor. Saat ini, 1.300 perusahaan mengisi laporan. Karena skor ditampilkan secara real time, fungsi statistik lambat.
Proses menjalankan kode :
1. Cari tahu 1300 informasi perusahaan
2. Traverse 1300 Informasi Perusahaan dan Hitung Informasi Skor dari setiap perusahaan. Setiap perusahaan diharapkan memiliki waktu 0,3 detik. Total 390 detik. Penyebab Halaman Permintaan Batas waktu
3. Ekspor (menggunakan JXL JAR)
Larutan:
Karena menangani bisnis, perlu memiliki utas yang dapat mengembalikan nilai. Gunakan: Callable
Langsung unggah kode
1. Kode yang memanggil utas
List<Map<String,Object>> list = (List<Map<String, Object>>) map.get("rows");int taskSize = 20;// Create a thread pool ExecutorService pool = Executors.newFixedThreadPool(taskSize);// Create multiple tasks with return values List<Future> listFuture = new ArrayList<Future>();for (int i = 0; i < taskSize; 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 <peta <string, object >> (); coba {listModel = (daftar <peta <string, object >>) f.get ();} catch (interruptedexception e) {e.printstacktrace ();} catch (executionException e) {e.printStackRace ();} listresult. Listresult);2. Kode utas
Paket USI.JSZX.Controller; import java.util.list; import java.util.map; impor java.util.concurrent.callable; import javax.servlet.http.httpsession; impor org.apache.commons.lang3.stringut; USI.JSZX.Service.Declaremasterservice; Impor USI.JSZX.Service.Declareservice; impor USI.JSZX.Service.Declareservice; impor USI.JSZX.Service.EnterriseQueryService; Import USI.SYS.SYS.SYSIN; USI.SYS.UTIL.CONSTANTUTIL; Kelas MyCallable mengimplementasikan Callable <POMPER> {// --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 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 call () Lempar Exception {Authinfo Info = (authinfo) sesi. {Peta <string, object> mapList = list.get (i); string mainid = maplist.get ("id")+""; this.grademaster (sesi, mainid, maplist.get ("orgId")+", DeclareMasterService, enterPriseQueryService); Daftar <MAP <String, Objectscore = Listscore = DeclareMasterService.QueryScoremain (MapList.get ("id")+"", info.getRightType (), "Laporan"); // DeclareMasterService.QueryScoremain (MainID, info.getRightType (), isReport); int isDouble = 1; if (listscore. ListScore.get (46) .get ("skor")); isDouble = 2;} lain jika (listScore.size ()> 22) {maplist.put ("socretotal", listscore.get (23) .get ("skor"));} if ("3" .equals (staticflag) {for) {for) {for) {for) {for) {for) {static) {for) {static) {for) {static) {for) {static) {for) {static) {static) {static) {static) {static)))))))) {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_valeeeeeeeee), listscore. MapList.get ("CountyId")+""; if ("340826" .Equals (countyId) || "341822" .Equals (countyId)) {MapList.put ("CityName", MapList.get ("Countyname")+");} // Corporate Type String Declare_evaluate = MapList.get ("Declare_evaluate")+""; if ("1" .Equals (Declare_evaluate)) {MapList.put ("Declare_evaluate_name", "Deklarasi");} else {MapList.put ("Declare_evaluate_name", "Evaluation"); MapList.get ("shstatus")+""; if ("9" .Equals (shstatus)) {MapList.put ("strshstatus", "draft");} lain jika ("0" .Equals (shstatus)) {maplist.put ("strshStatus", "enterprise kiriman enterprise); if ("1" .Equals (shstatus)) {MapList.put ("strshstatus", "City Review lewat");} lain jika ("2" .Equals (shstatus)) {MapList.put ("strshstatus", "City Review lulus");} lain if ("3". Lulus ");} lain jika (" 4 ".Equals (shstatus)) {MapList.put (" strshStatus "," Tinjauan Provinsi Gagal ");} lain jika (" 5 ".Equals (shstatus)) {MapList.put (" strshstatus "," tinjauan provinsi ");} lainnya if ("6" .Equals (shstatus)) {MapList.put ("strshstatus", "Return to Enterprise Modification");} lain jika ("7" .Equals (shstatus)) {MapList.put ("strshstatus", "tinjauan kota");} lain jika ("11". "Modifikasi ke Deklarasi");} lain jika ("12" .Equals (shstatus)) {MapList.put ("strshStatus", "Modifikasi ke evaluasi");} if ("1" .Sequals (staticflag)) {// Tambahkan Daftar Opini Modifikasi <MAP <string, Object >> ListDetail = DeclareR = DeclARRICE. if (listDetail.size ()> 0) {string audit_opinion = listDetail.get (0) .get ("audit_opinion")+""; if (! stringutils.isempty (audit_opinion) &&! "null" .Adit (audit_opinion)) {MapList.put; "" Audit, audit_opinion)) {MapList.put; "Audit, Audit, Audit, Audit, Audit_opinion)) {MapList.put." else {mapList.put ("audit_opinion", "");}} // Apakah dulu diubah menjadi 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" "", "no"); mapList.put ("pjname (" paplist ("pjname"); mapList.put ("pjname"); mapList.put ("pjname") lain {maplist.put ("isgengming", "yes"); maplist.put ("pjname_e", pjname);} lain jika ("2" .Equals (staticflag)) {}} Daftar pengembalian; EnterpriseQueryService) {authinfo info = (authinfo) session.getAttribute (constantutil.auth_info); string rightType = info.getRightType (); DeclareMasterService. data* * Since the review has been made, the main table data must be stored* */List<Map<String,Object>> listDetail = declareMasterService.queryTaskDetail(mainId);if("2".equals(rightType)||"3".equals(rightType)){//Convert String to floatfor (int i = 0; i < listDetail.size(); i++) {Peta <string, object> peta = listDetail.get (i); if (stringutils.isempty (map.get ("Declare_city_value")+") ||" null ".sequals (map.get (" declare_city_value ")+")) {hasil hancur [i] = 0f; float.parseFloat (map.get ("Declare_City_Value")+"");}}} else {// Konversi string ke floatfor (int i = 0; i <listDetail.size (); i ++) {peta <string, objek> peta = listDetail.get (i); if (stringutils.isempty (map.get ("declare_province_value")+"") || "null" .equals (Map.get ("Declare_province_value")+"")) {hasilnya [i] = 0f;} lain {Hasil Hasil. " float.parseFloat (Map.get ("Declare_province_value")+"");}}} peta <string, objek> enterprise = enterpriseQueryService.getinfobyorgid (orgid) .get (0); // Hitung nilai sesuai dengan formula perhitungan dari anHiuasi anHi. Langkah selanjutnya adalah menghitung rasio float skor1 = 0f; rasio float2 = 0f; rasio float3 = 0f; coba {rasio1 = float.parsefloat (enterprise.get ("ratio1")+""); ratio2 = float.parsefloat (enterprise.get ("ratio2") "); float.parseFloat (enterprise.get ("ratio3")+"");} catch (exception e) {} peta <string, objek> peta = DeclareController.getValue (resultFirst, float1, ratio2, ratio3); float [] resultValue = (float []) map.get = ratio3); float [] resultValue = (float []) map.get ("] ["]; Map.get ("RESSCOREVALUE"); float [] resultCore = DeclareController.getScore (hasil HasilCorEvalue); float scoretotal = 0F; Daftar <peta <string, objek >> listScore = newemasterservice. 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 (resultCorevalue [i]+""); scoremain.setscore (resultCore [i]+""); DeclaremasterService.Insscoremain (Scoremain); scoretotal += resultCore [i];} return scoretotal;}}Catatan: MyCallable hanyalah cara yang rumit dalam menangani bisnis. Itu bisa diabaikan, dan akhirnya mempercepat dari 390 detik menjadi 40 detik.
Meringkaskan
Di atas adalah seluruh konten dari artikel ini tentang contoh kode solusi dari eksekusi multi-threaded Java dan waktu bisnis terlalu lama. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!