シンプルなスレッドプールを使用して高効率をループするために作る方法

以下は、次のプロジェクト私が遭遇した小さな問題があります

検針機器の項目のループ(経常1.は、ループの常識がコピーされるが、これは特にマルチデバイスおよび15秒の再発行のコピー前の中間滞在のための装置では、非効率的ですテーブル指示、効率が極めて低いです。)

@Scheduled(cron = "0 */7 * * * ?")
	public void updeteYM() {
		System.out.println("---Scheduled=YM测试测试---"+new Date());
		new Thread() {
			public void run() {
				GatewayPo gateway = new GatewayPo();
				gateway.setType(3);
				List<GatewayPo> all_gateway = gatewayService.findGateway(gateway);
				if (all_gateway.size()!=0) {
					for (int i = 0; i < all_gateway.size(); i++) {
						YmDevice ym = new YmDevice();
						ym.setGwid(all_gateway.get(i).getId());
//						ym.setStatus("1");
						List<YmDevice> all_dev = ymDeviceService.findYMdevice(ym);
						if (all_dev.size()!=0) {
							for (int j = 0; j < all_dev.size(); j++) {						
								try {
									//循环抄表
									switch (all_dev.get(j).getType()) {
									case "64":					
										new YmCode().Get_Watt_Munber(all_dev.get(j).getNumber(), all_gateway.get(i).getGwid());
										break;
									default://冷、热水表
										new YmCode().Get_Watter_Munber(all_dev.get(j).getNumber(), all_gateway.get(i).getGwid(), all_dev.get(j).getType());
										break;
									}
									System.out.println("抄表完成 ---开始停止15秒");
									Thread.sleep(15000);
									System.out.println("抄表完成 ---停止15秒结束");
								} catch (Exception e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
							}
						}
					}
				}			
				
		    }
		}.start();
	}

2.高効率トラバーススレッドプールの組み合わせは、(それが他の機器の実行を命じコピーした後の最初のデバイスは、ここにコピーを開始した後、デバイスは、別のデバイスが同時に開始をコピーすることができません)

以下は、2つの方法があり:(私のテストタイマーを無視します)

@Scheduled(cron = "0 */3 * * * ?")
	public void updeteYM2() {
		System.out.println("---YMcb2---start--------------------"+new Date());
		new Thread() {
			public void run() {
				GatewayPo gateway = new GatewayPo();
				gateway.setType(3);
				List<GatewayPo> all_gateway = gatewayService.findGateway(gateway);
				ExecutorService pool = Executors.newCachedThreadPool();    
			    for (int i = 0; i < all_gateway.size(); i++) {   
			    	Integer gwid = all_gateway.get(i).getId();
			    	String gwidNum = all_gateway.get(i).getGwid();
			        Runnable run = new Runnable() {    
			            public void run() {    
			                try {    
			                	YmDevice ym = new YmDevice();
								ym.setGwid(gwid);
//								ym.setStatus("1");
								List<YmDevice> all_dev = ymDeviceService.findYMdevice(ym);
								if (all_dev.size()!=0) {
									for (int j = 0; j < all_dev.size(); j++) {						
										try {
											//循环抄表
											switch (all_dev.get(j).getType()) {
											case "64":					
												new YmCode().Get_Watt_Munber(all_dev.get(j).getNumber(), gwidNum);
												break;
											default://冷、热水表
												new YmCode().Get_Watter_Munber(all_dev.get(j).getNumber(), gwidNum, all_dev.get(j).getType());
												break;
											}
											System.out.println("抄表完成 ---开始停止15秒");
											Thread.sleep(15000);
											System.out.println("抄表完成 ---停止15秒结束");
										} catch (Exception e) {
											// TODO Auto-generated catch block
											e.printStackTrace();
										}
									}
								}
			                	
			                } catch (Exception e) {    
			                }    
			            }    
			        };   
			        pool.execute(run);    
			    } 
			    pool.shutdown();
		    }
		}.start();
	}
 @Scheduled(cron = "0 */50 * * * ?")
		public void updeteYM3() {
			System.out.println("---YMcb3---start-------------------"+new Date());
			new Thread() {
				public void run() {
					GatewayPo gateway = new GatewayPo();
					gateway.setType(3);
					List<GatewayPo> all_gateway = gatewayService.findGateway(gateway);
					Executor executor = Executors.newFixedThreadPool(all_gateway.size());		
			        for (int i = 0; i < all_gateway.size(); i++) {
			        	Integer gwid = all_gateway.get(i).getId();
				    	String gwidNum = all_gateway.get(i).getGwid();
			            executor.execute(new Runnable() {
			                @Override
			                public void run() {
			                	YmDevice ym = new YmDevice();
								ym.setGwid(gwid);
								ym.setStatus("1");
								List<YmDevice> all_dev = ymDeviceService.findYMdevice(ym);
								if (all_dev.size()!=0) {
									for (int j = 0; j < all_dev.size(); j++) {						
										try {
											//循环抄表
											switch (all_dev.get(j).getType()) {
											case "64":					
												new YmCode().Get_Watt_Munber(all_dev.get(j).getNumber(), gwidNum);
												break;
											default://冷、热水表
												new YmCode().Get_Watter_Munber(all_dev.get(j).getNumber(), gwidNum, all_dev.get(j).getType());
												break;
											}
											System.out.println("抄表完成 ---开始停止15秒");
											Thread.sleep(15000);
											System.out.println("抄表完成 ---停止15秒结束");
										} catch (Exception e) {
											// TODO Auto-generated catch block
											e.printStackTrace();
										}
									}
								}
			                }
			            });
			        }
			    }
			}.start();
		}

 

公開された141元の記事 ウォン称賛33 ビュー50000 +

おすすめ

転載: blog.csdn.net/qq_43560721/article/details/104834447