当前位置: 首页 > news >正文

网站制作厂家电话多少网站域名备案流程

网站制作厂家电话多少,网站域名备案流程,公司注册地址的要求,内网网站如何建设方案背景 在需求开发过程中#xff0c;为了提升效率#xff0c;很容易就会遇到需要使用多线程的场景。这个时候一般都会选择建一个线程池去专门用来进行某一类动作#xff0c;这种任务到来的时候往往伴随着大量的线程被创建调用。而还有另外一种场景是整个任务的执行耗时比较长…背景 在需求开发过程中为了提升效率很容易就会遇到需要使用多线程的场景。这个时候一般都会选择建一个线程池去专门用来进行某一类动作这种任务到来的时候往往伴随着大量的线程被创建调用。而还有另外一种场景是整个任务的执行耗时比较长但又不适合起多线程去运行只能后台起一个异步线程去慢慢跑。这个时候就需要一个公共的线程池。 可选方案 总体思想就是要有一个全局可用的线程池可以用来执行一些零散的任务。 方案一 自定义一个全局的线程池需要异步操作的就调用。这种方法好处是实现简单并且调用起来也简单直接当成一个方法就可以了。但需要同模块项目或者导入了模块才能使用。 方案二 使用Spring自带的注解Async实现异步。这种方法的好处是注解可以跨模块使用因为线程池对象会被注入容器整个服务共用。而且更大的好处是使用简单使用者只需要给所需异步操作的方法加上Async(“beanName”)即可。其中beanName是指注入容器的对象的名称也可以不加参数不加参数代表使用默认线程池。 考虑到便捷性和新手友好性选择了方案二。 实现注意看我的调用的结构可以避免循环依赖 controller-async-service √ controller-service-async-service ×这样会出现循环依赖 1.创建线程池配置类 /** * 必须加上EnableAsync注解 */ EnableAsync Configuration public class TaskPoolConfig {/*** 可以多创建几个bean注入容器根据bean不同用来执行不同类型的任务*/Bean(taskExecutor)public Executor taskExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();//核心线程池大小executor.setCorePoolSize(16);//最大线程数executor.setMaxPoolSize(20);//配置队列容量默认值为Integer.MAX_VALUEexecutor.setQueueCapacity(99999);//活跃时间executor.setKeepAliveSeconds(60);//线程名字前缀executor.setThreadNamePrefix(asyncServiceExecutor -);//设置此执行程序应该在关闭时阻止的最大秒数以便在容器的其余部分继续关闭之前等待剩余的任务完成他们的执行executor.setAwaitTerminationSeconds(60);//等待所有的任务结束后再关闭线程池executor.setWaitForTasksToCompleteOnShutdown(true);return executor;}Bean(taskExecutor2)public Executor taskExecutor2() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();//核心线程池大小executor.setCorePoolSize(16);//最大线程数executor.setMaxPoolSize(20);//配置队列容量默认值为Integer.MAX_VALUEexecutor.setQueueCapacity(99999);//活跃时间executor.setKeepAliveSeconds(60);//线程名字前缀executor.setThreadNamePrefix(asyncServiceExecutor -);//设置此执行程序应该在关闭时阻止的最大秒数以便在容器的其余部分继续关闭之前等待剩余的任务完成他们的执行executor.setAwaitTerminationSeconds(60);//等待所有的任务结束后再关闭线程池executor.setWaitForTasksToCompleteOnShutdown(true);return executor;} }2.使用异步 异步类 public interface AsyncService {void test(); }Slf4j Service public class AsyncServiceImpl implements AsyncService {Autowiredprivate TestService testService;//这里的参数是只bean的名称不填则使用默认的线程池。如果这个注解放在类上代表这个类里面的全部方法都走异步Async(taskExecutor)void test(){testService.todo();}Async(taskExecutor2)void test2(){testService.todo2();} }业务类 public interface TestService {void todo();void todo2(); }Slf4j Service public class TestServiceImpl implements TestService{void todo(){LocalDateTime dateTimeLocalDateTime.now();log.info(已经进入异步方法现在时间{}睡三秒,dateTime);try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}dateTimeLocalDateTime.now();log.info(三秒后时间为{},dateTime);}void todo2(){} }测试类 Slf4j RestController public class TestController {Autowiredprivate AsyncService asyncService;RequestMapping(/test)public void test(){asyncService.test();LocalDateTime dateTimeLocalDateTime.now();log.info(这是主线程现在时间为{},dateTime);} }结果成功 坑点 1.异步失效 如果一个类里面有两个方法A、B方法B添加了异步注解方法A调用方法B异步不会生效。 查了一下好像是因为异步注解的实现用到了动态代理而一个类内部方法的调用不会走代理也就没法实现异步。 因此建议把异步都放在一个专门的异步类里面这个类的方法只用来实现异步方法内部再去调用真正的业务逻辑方法。 2.循环依赖 正常来说A类中注入B类对象B类中再注入A类对象。这种情况在代码中并不会发生循环依赖。而在异步注解中会出现循环依赖因为异步注解底层实现用的是动态代理。
http://www.hkea.cn/news/14565646/

相关文章:

  • 无忧网络网站建设专门做校招的网站
  • 免费建论坛网站网站打开速度变慢
  • 有公网ip 如何做一网站微营销平台有哪些
  • 手机seo网站推广好网站制作
  • 老网站做成适合手机端的网站怎么做杭州模板网站建设
  • 嘉兴自助建站模板如何添加网站 ico
  • 有没有能用的网站无锡网站开发公司电话
  • 门户网站建设总结wordpress纪念册主题
  • 微信网站怎么做的陕西省住房建设厅官网
  • 移动互联网站开发昆山建设工程招聘信息网站
  • 网站建设合约具体内容wordpress 主题 设计
  • 厦门网站建设培训机构群晖 wordpress 阿里云
  • 南昌市建设工程质量监督网站wordpress 表单 采集
  • 网站被别人做了跳转天元建设集团有限公司张桂玉
  • 网站建设目的及功能定位网站建设好如何开通
  • 学习完成网站建设作业贵阳网站建设hsyunso
  • 威海城乡建设局网站郑州宣传片制作
  • 玉林做网站公司开发一个app价格
  • 医疗网站建设哪家好做淘宝客网站需要备案吗
  • 深圳网站设计九曲开发工具选项卡在哪
  • 电脑做视频的网站wap网站建设公司
  • 易橙云做的网站怎么样十大素材网站
  • wordpress 调用站外api电子商务网站建设需求
  • 做餐饮酒店网站肇庆城乡建设网站
  • 做教育网站挣钱网络工程解决方案公司
  • 邢台做网站优化网站建设 应该付多少维护费呢
  • 网站建设技术标书苏州学做网站
  • 绿色大气网站艺术设计专业灵感推荐网站
  • 网站开发原始数据鲅鱼圈网站建设
  • 做国内学历公证的网站徐州做网站哪里好