首页 > 网络安全频道 > 系统安全 > 正文
利用队列的自动阻塞和线程池来做线程的生产消费
2016-11-02     我来说两句       作者:
   我要投稿

  

1.相关实体

Java代码   
  1. package com.royalnu.psis.interfaces.psp.api.model;  
  2.   
  3. import com.royalnu.core.module.com.Identifiable;  
  4. import lombok.Getter;  
  5. import lombok.Setter;  
  6.   
  7. @Setter  
  8. @Getter  
  9. public class PspMsg extends Identifiable {  
  10. private static final long serialVersionUID = 1L;  
  11.   
  12.     /** 
  13.      * <pre> 
  14.      * xml内容 
  15.      * </pre> 
  16.      *  
  17.      */  
  18.     private String xmlContent;  
  19.   
  20.     /** 
  21.      * <pre> 
  22.      * 服务器IP 
  23.      * </pre> 
  24.      *  
  25.      */  
  26.     private String serverIp;  
  27.   
  28. }  

 2.定义队列静态属性减少在构造器中传递

Java代码  收藏代码
  1. package com.royalnu.psis.interfaces.psp.provider.threads;  
  2. import java.util.concurrent.BlockingQueue;  
  3. import java.util.concurrent.ExecutorService;  
  4. import java.util.concurrent.Executors;  
  5. import java.util.concurrent.LinkedBlockingQueue;  
  6. import com.royalnu.psis.interfaces.psp.api.model.PspMsg;  
  7.   
  8. public class ThreadConstants {  
  9.  public static final ExecutorService cachedThreadPool = Executors.newCachedThreadPool();   
  10.  public static final BlockingQueue<PspMsg> PspMsgQueue = new LinkedBlockingQueue<PspMsg>();  
  11. }  

 3.生产者

Java代码   
  1. package com.royalnu.psis.interfaces.psp.provider.threads;  
  2. import java.util.List;  
  3. import javax.annotation.Resource;  
  4. import com.royalnu.psis.interfaces.psp.api.model.PspMsg;  
  5. import com.royalnu.psis.interfaces.psp.api.service.PspMsgService;  
  6. import lombok.extern.log4j.Log4j2;  
  7.   
  8. @Log4j2  
  9. public class PspProduceDealThread implements Runnable {  
  10.   
  11.     private List<PspMsg> pspMsgList;  
  12.     private boolean isData = true;  
  13.   
  14.     public PspProduceDealThread() {  
  15.   
  16.     }  
  17.   
  18.     public PspProduceDealThread(List<PspMsg> pspMsgList) {  
  19.         this.pspMsgList = pspMsgList;  
  20.   
  21.     }  
  22.   
  23.     public void run() {  
  24.   
  25.         while (isData) {  
  26.             try {  
  27.   
  28.                 for (PspMsg pspMsg : pspMsgList) {  
  29.                     ThreadConstants.PspMsgQueue.put(pspMsg);  
  30.                     log.info("生产" + pspMsg.getServerIp());  
  31.                     Thread.sleep(500L);  
  32.                 }  
  33.   
  34.             } catch (Exception e) {  
  35.                 e.printStackTrace();  
  36.             }  
  37.         }  
  38.     }  
  39. }  

 4.消费者

Java代码   
  1. package com.royalnu.psis.interfaces.psp.provider.threads;  
  2. import com.royalnu.psis.interfaces.psp.api.model.PspMsg;  
  3. import lombok.extern.log4j.Log4j2;  
  4.   
  5. @Log4j2  
  6. public final class PspConsumerDealThread implements Runnable {  
  7.   
  8.     public void run() {  
  9.           
  10.         while (true) {  
  11.             try {  
  12.                 PspMsg take = ThreadConstants.PspMsgQueue.take();  
  13.                 log.info("消费" + take.getServerIp());  
  14.             } catch (InterruptedException e) {  
  15.                 e.printStackTrace();  
  16.             }  
  17.         }  
  18.           
  19.     }  
  20. }  

 5.生产消费处理类主要方法

Java代码   
  1. List<PspMsg> pspMsgList = new LinkedList<PspMsg>();       
  2.         for (int i = 1; i < 10; i++) {  
  3.             PspMsg pspMsg = new PspMsg();  
  4.             pspMsg.setServerIp(String.valueOf(i));  
  5.             pspMsgList.add(pspMsg);  
  6.         }  
  7.       
  8.           
  9.       PspProduceDealThread produceDealThread = new PspProduceDealThread(pspMsgList);  
  10.       ThreadConstants.cachedThreadPool.execute(produceDealThread);  
  11.   
  12.  PspConsumerDealThread consumerDealThread = new PspConsumerDealThread();  
  13.  ThreadConstants.cachedThreadPool.execute(consumerDealThread);  
点击收藏到自己的收藏夹!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:下拉框赋值
下一篇:win7一键快速切换ip地址脚本
相关文章
图文推荐
排行
热门
网站
工具
无线
关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 中国黑帽网--致力于做最好的网络安全技术学习网站 。