1、使用线程池:
List<NodeDevice> nodeDevices = DBDataService.getInstance() .getNodes(ClientContext.user);
int i = nodeDevices.size();
// 如果没有设备直接返回
if (i == 0)
return newList;
int j = i;
int k = 50;
if (j > k)
{
j = k;
}
// 构造一个线程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(j, j, 30L,
TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(3),
new ThreadPoolExecutor.DiscardOldestPolicy());
for (NodeDevice nodeDevice : nodeDevices)
{
// 执行给定任务
threadPool.execute(new ThreadPoolTask(nodeDevice, resourceMap,
newList));
}
// 按过去执行已提交任务的顺序发起一个有序的关闭
threadPool.shutdown();
// 基于完成执行给定 Runnable 所调用的方法。
for (boolean bool = false; !(bool); bool = threadPool
.awaitTermination(1L, TimeUnit.SECONDS)) ;
// 线程池执行的任务
public class ThreadPoolTask extends Thread
{
private static final long serialVersionUID = 0;
// 保存任务所需要的数据
private NodeDevice nodeDevice;
private Map<String, List<NodeResourceObject>> resourceMap;
private List<NodeResourceObject> newList;
ThreadPoolTask(NodeDevice nodeDevice,
Map<String, List<NodeResourceObject>> resourceMap,
List<NodeResourceObject> newList)
{
this.nodeDevice = nodeDevice;
this.resourceMap = resourceMap;
this.newList = newList;
}
@Override
public void run()
{
try
{
SNMPTarget target = SNMPTargetTool
.nodeToSNMPConnInfo(nodeDevice);
List<eocCNUUanuthListEntry> uanuthList = SNMPFactory
.getSNMPAPI().getAllTableData(
eocCNUUanuthListEntry.class, target);
List<NodeResourceObject> resources = resourceMap.get(nodeDevice
.getNodeName());
if (uanuthList.size() > 0)
{
for (NodeResourceObject resource : resources)
{
for (int i = 0; i < uanuthList.size(); i++)
{
if (uanuthList.get(i).getEocCNUUnauthListMac() != null
&& resource.getExtendFieldStringB().equals(
uanuthList.get(i)
.getEocCNUUnauthListMac()))
{
isequals = true;
}
}
if (isequals)
{
newList.add(resource);
}
else
{
NodeResourceObject newObj = new NodeResourceObject();
newObj.setNodeResourceKey(resource
.getNodeResourceKey());
newObj.setNodeName(resource.getNodeName());
newObj.setResourceRSIDValue(resource
.getResourceRSIDValue());
newObj.setExtendFieldStringB(resource
.getExtendFieldStringB());
newObj.setResourceCheckStatus("");
newList.add(newObj);
}
}
}
} catch (Exception ex)
{
}
}
2、接收异常,但不抛出:
for(int i=0;i<num.length;i++)
{
try{
……………..
}catch(Exception)
{
}
}