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

@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. 使用JAX-WS开发WebService

    Axis2和CXF是目前流行的Webservice框架,这两个框架都属于重量级框架.相对而言,JAX-WS RI是一个轻量级的框架.开发WebService只需要很简单的几个步骤:写接口和实现-> ...

  2. Git 分支 - 远程分支

    Git 分支 - 远程分支 远程分支 远程分支(remote branch)是对远程仓库中的分支的索引.它们是一些无法移动的本地分支:只有在 Git 进行网络交互时才会更新.远程分支就像是书签,提醒着 ...

  3. 原创:R包制作--windows

    1.下载安装Rtools,添加环境变量: 打开R,分别输入下面指令,看有无包错: system('g++ -v') system('where make') 2.package.skeleton()函 ...

  4. Oracle其他简单查询

    范例:查询公司中所有雇员的职位信息 SELECT job FROM emp; 实际在公司里面,一个职位会有多个人员.如果查询全部职位,肯定会存在重复.要消除掉重复,利用DISTINCT完成.(dist ...

  5. 认识flask框架

    1.框架的基本认识: 特点:用Python语言实现的轻量.简洁.扩展性强. 核心:werkzeug和Jinja2 2.虚拟环境: 创建:mkvirtualenv -p python3 名称 进入:wo ...

  6. java创建线程的方法

    1.1      创建线程 1.1.1     无返回值的线程创建 package com.first; public class ThreadTest { public static void ma ...

  7. vue 里面引入高德地图

    效果图: 实现: 一:引入 高德,web-sdk (两种方式) 1:在html 中引入(我用的这一种) <script type="text/javascript" src= ...

  8. layui 日期插件onchange事件失效的方法

    laydate.render({ elem:'#text1',//制定元素 type:'date', //range:true,//开启左右面板 min:'2017-09-1',// max:'201 ...

  9. Eclipse中打包插件Fat Jar的安装与使用

    转自:https://www.cnblogs.com/wbyp/p/6222182.html     Eclipse可以安装一个叫Fat Jar的插件,用这个插件打包非常方便,Fat Jar的功能非常 ...

  10. Python 编程快速上手 第八章总结

    在下面函数中的()中,可为相对路径,也可为绝对路径. 获知当前目录,改变当前目录,查看当前目录 更改当前目录:os.getcwd() 改变当前目录:os.chdir() 查看当前目录:os.listd ...