一个多线程和队列的实例演示

时间:2023-02-16 13:03:03

功能需求:设备策略升级

详细描述:用户可以不定期的创建1条策略来升级选择的多个设备从a版本到b版本                   

     一个多线程和队列的实例演示
 
 
 
 
解决方案
一个多线程和队列的实例演示
 
 
java代码
 
创建个*带自动回收机制的线程池
ExecutorService threadPool = Executors.newCachedThreadPool();
 
创建策略
    //把每条策略要升级设备放入队列中
    LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<Integer>();
    for(int j=startNum;j<endNum;j++)
    {
     queue.offer(dev[j]);
    }
StratageConsumer consumer=new StratageConsumer(queue);
 
每次创建策略后加入线程池
threadPool.execute(consumer);
 
 
启动策略
[java]  view plain copy
  1. @Override  
  2.     public void run() {  
  3.         Integer data=null;  
  4.         while(Thread.currentThread().isInterrupted()==false && isRunning)  
  5.         {  
  6.             //System.out.println("运行线程数"+Thread.getAllStackTraces().size());  
  7.             try {  
  8.                 //因为BlockingQueue是线程安全的,所以不用考虑同步问题  
  9.                 data = queue.take();  
  10.                               
  11.                 //升级处理  
  12.                 if(data!=null)  
  13.                 {  
  14.                     iCrawcomplete.update(data);  
  15.                 }  
  16.                                   if(queue.isEmpty()){  
  17.                                               try {  
  18.                         Thread.sleep(360*1000);  
  19.                     } catch (Exception e) {  
  20.                     }    
  21.                     Thread.currentThread().interrupt();   
  22.                                             isRunning = false;    
  23.                                      }  
  24.                   
  25.                                   Thread.sleep(60*1000);  
  26.             }catch (Exception e) {  
  27.                 logger.info("抓取"+url+data+"出现异常"+e.getStackTrace());  
  28.             }  
  29.         }  
  30.           
  31.     }