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

电子商务网站建设与维护03网站后台模板怎样使用

电子商务网站建设与维护03,网站后台模板怎样使用,现在的企业一般用的什么邮箱,WordPress和shopipfy一、先说结论 得看线程池的实现,JUC 的线程池(ThreadPoolExecutor)的话 不会影响其他的线程若是 submit 方法,或者任务为 future 任务,异常只有在 get 的时候才会抛出若是 execute runnable 任务,异常就…

一、先说结论

得看线程池的实现,JUC 的线程池(ThreadPoolExecutor)的话

  1. 不会影响其他的线程
  2. 若是 submit 方法,或者任务为 future 任务,异常只有在 get 的时候才会抛出
  3. 若是 execute + runnable 任务,异常就会抛出,线程挂掉后,线程池移除该线程并创建一个新的线程

若通过 submit 提交任务,会将任务封装到 future 里面或者原任务本身就是 future 任务,而 future 的 run 方法执行的时候,抛出的异常在其内部会被捕获,等到 get 方法的时候才会抛出。

execute + runnable,并没有涉及 future,虽然异常会被捕获,但也以为被重新抛出,导致线程中断,线程池需要移除线程,并创建新的线程

二、submit、execute 方法

在这里插入图片描述

在这里插入图片描述

线程运行任务核心代码

final void runWorker(Worker w) {Thread wt = Thread.currentThread();Runnable task = w.firstTask;w.firstTask = null;w.unlock(); // allow interruptsboolean completedAbruptly = true;try {while (task != null || (task = getTask()) != null) {w.lock();// If pool is stopping, ensure thread is interrupted;// if not, ensure thread is not interrupted.  This// requires a recheck in second case to deal with// shutdownNow race while clearing interruptif ((runStateAtLeast(ctl.get(), STOP) ||(Thread.interrupted() &&runStateAtLeast(ctl.get(), STOP))) &&!wt.isInterrupted())wt.interrupt();try {beforeExecute(wt, task);try {task.run();afterExecute(task, null);} catch (Throwable ex) {afterExecute(task, ex);throw ex;}} finally {task = null;w.completedTasks++;w.unlock();}}completedAbruptly = false;} finally {processWorkerExit(w, completedAbruptly);}
}

三、异常处理

比较全面的处理,主要是,afterExecute 方法,这个哪怕抛出异常也会执行

new ThreadPoolExecutor(IO_CORE,IO_MAX,KEEP_ALIVE_SECOND,TimeUnit.SECONDS,// 任务队列存储超过核心线程数的任务new LinkedBlockingDeque<>(QUEUE_SIZE),r -> {Thread thread = new Thread(r);thread.setDaemon(Boolean.TRUE);thread.setName(String.format("%s, message-process-thread-%d", threadName, NUM.getAndIncrement()));return thread;}
) {@Overrideprotected void afterExecute(Runnable r, Throwable t) {// 若 t 不为 null,正常处理if (Objects.nonNull(t)) {log.error(t.getMessage());}// 特别注意的是 futureTask 在 run 的时候不会立即抛异常,而是吞掉,在调用 get 的时候才能抛出// 如果是 submit 提交,原本的任务被封装成 futureTask,异常不会在 t 里,而是在 futureTask 里(但原本的任务是 futureTask 的话,则应该是原本的任务 get 的时候才会抛异常)// 如果是 execute,则 r 还是原来的任务,但不排除 r 本来就是 futureTask,那么其错误信息本来就应该通过 get 获取,在这里处理一下也无妨,不影响原本的处理结果即可// 原任务为 futureTask 的时候,get 时一定要处理异常if (r instanceof Future<?> futureTask) {try {futureTask.get();} catch (Exception e) {log.error(e.getMessage());}}}
};
log.info("线程池已经初始化");
EXECUTOR.allowCoreThreadTimeOut(Boolean.TRUE);
// JVM 关闭时的钩子函数
Runtime.getRuntime().addShutdownHook(new ShutdownHookThread("IO 密集型任务线程池", (Callable<Void>) () -> {shutdownThreadPoolGracefully(EXECUTOR);return null;})
);
http://www.dtcms.com/wzjs/781968.html

相关文章:

  • html企业网站模板下载ip设计网站
  • 哪里可以做免费的物流网站手机网站建设 jz.woonl
  • 成都兴光华城市建设公司网站建设网站需要的硬件设备
  • 网站建设框架文案凡科互动投票破解
  • 中企动力网站建设 医疗做网站的必要条件
  • 网站托管服务工业设计是干什么的
  • 凡科做的网站百度收不收录注册安全工程师管理系统
  • 搜狗网站收录入口扁平化设计风格网站
  • 免费邯郸网站建设电子商务网站开发技术有哪些
  • 高负载php网站开发做的好的招投标网站
  • 商务网站建设有哪几个步骤开源房产网站源码
  • 网站怎么吸引人烟台哪里有做网站
  • node 网站开发 视频教程学ui设计难不难
  • 网站建设目录结构重庆最新新闻事件今天
  • wordpress七牛加密合肥网站开发 合肥网站优化
  • 专门做护理PDCA的网站北京专业网站设计推荐
  • 元谋网站建设wordpress应用主题出错
  • 中小企业网站制作价格学院网站群建设方案
  • 虫虫wap建站源码阿里云wordpress数据库
  • 网站如何做外链教程视频二级域名网站可以做关键词优化吗
  • 网站开发支付宝东营做网站多少钱
  • 4免费网站建站海南省建设考试网站首页
  • 一个完整网站开发合肥房产网安居客
  • 包头网站建设 奥北怎么快速推广业务
  • 网络公司网站设计多少钱长沙专业竞价优化首选
  • 免费模板网站推荐怎么查看网站的ftp地址
  • 向国旗敬礼做时代新人网站行业关键词分类
  • 栅格布局 网站设计唐山做网站多少钱
  • 软文推广范文seo优化是什么职位
  • 做网站优化就是发文章吗做百度竞价网站修改影响排名吗