读取一组设备,遇到异常不会中断执行

本文详细阐述了如何利用线程池技术优化设备资源的获取过程,包括设备节点初始化、线程池构建与任务执行,以及有序关闭线程池的方法。通过合理设置线程数量和超时策略,实现高效、有序地执行资源获取任务,提高系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

        {

       }

}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值