先来看一下改造前的模拟代码
这边模拟遍历一个大小是100的list,遍历每个元素去查询运行时间
public classServiceDemo {public static voidmain(String[] args) {
List deviceEntities=getAllDevices();long currentTimeMillis =System.currentTimeMillis();for(DeviceEntity deviceEntity : deviceEntities) {
getDeviceRunTime(deviceEntity);
}long currentTimeMillis2 =System.currentTimeMillis();
System.out.println("查询了"+(currentTimeMillis2-currentTimeMillis)+"毫秒");
}//模拟根据设备信息获取设备运行时间
public static voidgetDeviceRunTime(DeviceEntity deviceEntity) {
deviceEntity.setRunTime("运行了"+deviceEntity.getDeviceId()+"天");//模拟接口阻塞时间100毫秒
try{
Thread.sleep(100L);
}catch(InterruptedException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}//假设有100台设备
public static ListgetAllDevices() {
List deviceEntities=new ArrayList<>();for (int i = 1; i <= 100; i++) {
DeviceEntity deviceEntity=newDeviceEntity();
deviceEntity.setDeviceId(i);
deviceEntity.setDeviceName("设备"+i);
deviceEntity.setDeviceIp("192.168.100."+i);
deviceEntities.add(deviceEntity);
}returndeviceEntities;
}
}
实体类代码如下:
public classDeviceEntity {private intdeviceId;privateString deviceName;privateString deviceIp;privateString runTime;public intgetDeviceId() {returndeviceId;
}public void setDeviceId(intdeviceId) {this.deviceId =deviceId;
}publicString getDeviceName() {returndeviceName;
}public voidsetDeviceName(String deviceName) {this.deviceName =deviceName;
}publicString getDeviceIp() {returndeviceIp;
}public voidsetDeviceIp(String deviceIp) {this.deviceIp =deviceIp;publicString getRunTime() {returnrunTime;
}public voidsetRunTime(String runTime) {this.runTime =runTime;
}
@OverridepublicString toString() {return "DeviceEntity [deviceId=" + deviceId + ", deviceName=" + deviceName + ", deviceIp=" +deviceIp+ ", runTime=" + runTime + "]";
}
运行ServiceDemo类的main方法,控制台输出如下,因为模拟具体的查询接口的阻塞时间是100毫秒,那么100次查询也就是10秒时间
接下来我们采用多线程查询,直接在ServiceDemo类的main方法中改造
public static voidmain(String[] args) {
List deviceEntities =getAllDevices();long