线程处理的一个实际例子:

@Service
public class SynAsynThreadTestServiceImpl implements SynAsynThreadTestService {
private static final Logger logger = Logger.getLogger(SynAsynThreadTestServiceImpl.class); private static int nThreads = Runtime.getRuntime().availableProcessors() * 2 + 1; @Autowired
private ProdMapper prodMapper; private static ExecutorService executors = Executors.newFixedThreadPool(nThreads, new ThreadFactory() { private final String threadNamePrefix = "si_query_task_"; private final AtomicInteger count = new AtomicInteger(1); @Override
public Thread newThread(Runnable r) {
Thread t = new Thread(Thread.currentThread().getThreadGroup(), r, threadNamePrefix + count.getAndIncrement());
t.setDaemon(true);
return t;
}
}); @Override
public ProdSerDTO searchProd(String word) {
String url = "https://suggest.taobao.com/sug?code=utf-8&q=" + URLencord.getURLEncoderString(word) + "&callback=cb";
String response = HttpRequestUtils.getRequest(url, "0");
LoggerUtil.info(logger, "请求出参:{0}", response);
if (response != null) {
ProdSerDTO dto = JSON.parseObject(response, ProdSerDTO.class);
for (int i = 0; i < dto.getResult().size(); i++) {
SaveInfoProcessor saveInfoProcessor=new SaveInfoProcessor();
saveInfoProcessor.setProdMapper(prodMapper);
ProdDO pDo=new ProdDO();
List<Object> list =JSONArray.parseArray( dto.getResult().get(i));
pDo.setPname(list.get(0).toString());
pDo.setPnum(list.get(1).toString());
saveInfoProcessor.setProdDo(pDo);
LoggerUtil.info(logger, "i:{0},参数:{1}",i, pDo);
executors.submit(saveInfoProcessor); }
return dto;
}
return null;
} }
public class SaveInfoProcessor implements Runnable{
private static final Logger logger =Logger.getLogger(SaveInfoProcessor.class); private ProdDO prodDo; private ProdMapper prodMapper; public ProdDO getProdDo() {
return prodDo;
} public void setProdDo(ProdDO prodDo) {
this.prodDo = prodDo;
} public ProdMapper getProdMapper() {
return prodMapper;
} public void setProdMapper(ProdMapper prodMapper) {
this.prodMapper = prodMapper;
} @Override
public void run() {
LoggerUtil.info(logger, "线程:{0},存入:{1}",Thread.currentThread().getName(), prodDo);
prodMapper.insert(prodDo); } }

附项目地址:https://gitee.com/zyf6303/flowexample

注:项目是一个springboot测试项目,一直在更新完善中,希望大神们指点一二

springboot项目线程使用2的更多相关文章

  1. springboot项目线程使用

    下面是一个demo: public class TestThread { private static int nThreads =Runtime.getRuntime().availableProc ...

  2. springboot项目 线程消费队列注入报错误空指针

    背景: 在调用阿里云隐私保护有一个通话记录的回执消息是一个消费线程队列,这个还别人告诉我的,因为我根本没有看出来哪里是个线程了,然后我就把它当成普通的代码拿到返回值以后然后插入数据库 可是我这边该加的 ...

  3. 在SpringBoot项目中添加logback的MDC

    在SpringBoot项目中添加logback的MDC     先看下MDC是什么 Mapped Diagnostic Context,用于打LOG时跟踪一个“会话“.一个”事务“.举例,有一个web ...

  4. SpringBoot学习:在Interillj Idea上快速搭建SpringBoot项目

    一.创建SpringBoot项目 二.导入Jar包(pom.xml) <?xml version="1.0" encoding="UTF-8"?> ...

  5. SpringBoot源码分析之---SpringBoot项目启动类SpringApplication浅析

    源码版本说明 本文源码采用版本为SpringBoot 2.1.0BUILD,对应的SpringFramework 5.1.0.RC1 注意:本文只是从整体上梳理流程,不做具体深入分析 SpringBo ...

  6. SpringBoot项目集成Hystrix

    Hystrix Hystrix是由Netflix开源的一个服务隔离组件,通过服务隔离来避免由于依赖延迟.异常,引起资源耗尽导致系统不可用的解决方案. 1.什么是服务熔断   服务熔断就是对该服务的调用 ...

  7. VisualVM分析与HelloWorld、springBoot项目

    VisualVM分析与HelloWorld.springBoot项目 自从1995年第一个JDK版本JDKBeta发布,至今已经快25年,这些年来Java的框架日新月异,从最开始的Servlet阶段, ...

  8. 在liuunex下部署 springBoot项目

    1.新建springBoot项目. 2.打包生成jar 3.丢到liunex丢到(/usr/local/software) 4.检查进程,ps -ef|grep java (java代表所有的java ...

  9. 【API知识】SpringBoot项目中@EnableXXX的原理

    @EnableXX注解的使用场景 SpringBoot为开发人员提供了很多便利,例如如果想要定时功能,只要添加@EnableSchedule,即可配合@Schedule注解实现定时任务功能,不需要额外 ...

随机推荐

  1. synchronized 关键字如何使用

    http://blog.csdn.net/shenshibaoma/article/details/53009505 http://www.importnew.com/20444.html 锁一般分为 ...

  2. 论文笔记之:Heterogeneous Face Attribute Estimation: A Deep Multi-Task Learning Approach

    Heterogeneous Face Attribute Estimation: A Deep Multi-Task Learning Approach  2017.11.28 Introductio ...

  3. 深度学习课程笔记(四)Gradient Descent 梯度下降算法

    深度学习课程笔记(四)Gradient Descent 梯度下降算法 2017.10.06 材料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS1 ...

  4. (zhuan) Recurrent Neural Network

    Recurrent Neural Network 2016年07月01日  Deep learning  Deep learning 字数:24235   this blog from: http:/ ...

  5. to do list_hadoop

    1.页面翻译 2.UI优化 vue.js reactive.js 3.Hadoop生态学习 Spark.Kafka.Druid……

  6. React Naive 解决防止多次点击的解决方法

    export default class TouchableOpacity extends Component { render() { return ( <TouchableOpacity a ...

  7. 关于在mac安装安卓的模拟器的一些些那点事情~~~

    ook~~自己捣鼓了三天终于安装成功了~妹的~踩了太多的坑~整个人就不好了~ 为了节省大家的时间~所以今天我就将我安装的过程整体思路教给大家!有了思路安装起来就很好了!!!但是 注意的是,也许你会出现 ...

  8. CSS--点击改变样式

    当某个链接或元素被选中时可以时,需要改变其颜色或状态,而stylus中提供&选择器,&指向父选择器,用于判断父元素达到某条件时改变状态,下面的例子中当父元素router-link有被选 ...

  9. 理解 Redis(2) - 手把手教你理清 Redis 安装全过程

    Redis 官网 https://redis.io/ 之前学习 Redis 学了好多次, 下载安装也都按照教程或官网文档弄过, 但是对于安装过程一直有点迷糊, 感觉稀里糊涂地就好了, 就可以用了. 这 ...

  10. javascript 创建video元素

    <!DOCTYPE html> <html> <body> <h3>演示如何创建 VIDEO 元素</h3> <p>请点击按钮来 ...