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

邢台专业做网站公司网站seo诊断优化方案

邢台专业做网站公司,网站seo诊断优化方案,响应式wordpress商城,怎样学网站开发目录 1.概述 2.ThreadPoolExector 2.1.参数 2.2.新任务提交流程 2.3.拒绝策略 2.4.代码示例 1.概述 线程池的核心: 线程池的实现原理是个标准的生产消费者模型,调用方不停向线程池中写数据,线程池中的线程组不停从队列中取任务。 实现…

目录

1.概述

2.ThreadPoolExector

2.1.参数

2.2.新任务提交流程

2.3.拒绝策略

2.4.代码示例


1.概述

线程池的核心:

线程池的实现原理是个标准的生产消费者模型,调用方不停向线程池中写数据,线程池中的线程组不停从队列中取任务。

实现线程池需要考虑的几个核心因素:

  • 队列的长度

  • 队列满后,后面来的线程如何处理

队列的长度:

用来存线程这个队列的长度太小了可能会不够用,要是没有限制又可能导致机器的物理内存耗尽,所以最好的方式就是给这个队列一个初始化的长度,然后允许这个队列动态扩容。

队列满后,后面来的任务如何处理:

队列满了之后新来的任务如何处理?也就是拒绝策略,关于这个拒绝策略,是直接拒绝丢弃掉?还是把队列中的老任务丢弃掉给它让位置?还是说不走线程池,直接新开一条线程来执行?

继承体系:

可以看到顶级父接口提供了规范标准,真正干活儿的实现类只有ThreadPoolExcutor和ScheduleThreadPoolExecutor。

本文主要以ThreadPoolExcutor为切入聊一下线程池的核心概念,由于ScheduleThreadPoolExecutor主要是用来做延迟任务和周期任务的,以它为切入来聊线程池的核心概念并不是那么合适,后面会有文章专门聊一聊JDK基于线程池打造的一整套延迟任务、周期任务、异步任务等,这些任务调度体系。

2.ThreadPoolExector

2.1.参数

public class ThreadPoolExecutor extends AbstractExecutorService{private final AtomicInteger ctl;//状态变量private final BlockingQueue<Runnable> workQueue;//任务队列private final ReentrantLock mainLock;//用于保证线程池中各变量之间的互斥private final HashSet<ThreadPoolExecutor.Worker> workers;//线程组
}
private final class Worker extends AbstractQueuedSynchronizer implements Runnable{final Thread thread;//被封装的线程Runnable firstTask;//worker收到的第一个任务volatile long completedTasks;//worker执行完毕的任务数
}

线程池的核心参数为

  • corePoolSize:在线程池中始终维护的线程个数.

  • maxPoolSize:在corePooSize已满、队列也满的情况下,扩 充线程至此值。

  • keepAliveTime/TimeUnit:maxPoolSize 中的空闲线程,销 毁所需要的时间,总线程数收缩回corePoolSize。

  • blockingQueue:线程池所用的队列类型。

  • threadFactory:线程创建工厂,可以自定义,也有一个默 认的。

  • RejectedExecutionHandler:corePoolSize 已满,队列已 满,maxPoolSize 已满,最后的拒绝策略。

 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) {if (corePoolSize < 0 ||maximumPoolSize <= 0 ||maximumPoolSize < corePoolSize ||keepAliveTime < 0)throw new IllegalArgumentException();if (workQueue == null || threadFactory == null || handler == null)throw new NullPointerException();this.acc = System.getSecurityManager() == null ?null :AccessController.getContext();this.corePoolSize = corePoolSize;this.maximumPoolSize = maximumPoolSize;this.workQueue = workQueue;this.keepAliveTime = unit.toNanos(keepAliveTime);this.threadFactory = threadFactory;this.handler = handler;}

2.2.新任务提交流程

入口在ThreadPoolExector.execute(Runnable command)

public void execute(Runnable command) {if (command == null)throw new NullPointerException();
​int c = ctl.get();//如果当前线程组中的线程数量小于核心线程数,直接开一个新线程来执行该任务if (workerCountOf(c) < corePoolSize) {if (addWorker(command, true))return;c = ctl.get();}//如果当前线程组中的线程数量大于等于核心线程数,将该任务放入队列中if (isRunning(c) && workQueue.offer(command)) {int recheck = ctl.get();if (! isRunning(recheck) && remove(command))reject(command);else if (workerCountOf(recheck) == 0)addWorker(null, false);}//放入队列失败,再尝试新开一个线程来执行该任务else if (!addWorker(command, false))//这时候再失败意味着线程组数量已经大于maxPoolSize且任务队列已满,直接执行拒绝策略reject(command);}

2.3.拒绝策略

ThreadPoolExector一共提供了四种拒绝策略:

  • AbortPolicy,默认拒绝策略,直接抛出异常。

  • CallerRunsPolicy,让任务在调用者的线程中执行,线程池不对任务做处理。

  • DiscardPolicy,线程池直接把任务丢弃掉,就当什么都没有发生。

  • DiscardOldestPolicy,把队列中最老的任务删掉,将新任务放入队列。

2.4.代码示例

在使用线程池的时候并不需要我们手动去创建,JDK中有工具类来帮我们创建各种线程池,这个工具类只是包了一层,其底层还是创建的我们上面聊的这些线程池的实现类,以下是代码示例:

import java.util.concurrent.*;public class ThreadPoolExamples {public static void main(String[] args) throws InterruptedException {// 固定大小的线程池示例fixedThreadPoolExample();// 单线程线程池示例singleThreadExecutorExample();// 缓存线程池示例cachedThreadPoolExample();// 定时线程池示例scheduledThreadPoolExample();}/*** 创建一个固定大小的线程池,该线程池中的线程数量固定,不会因为任务的增加而增加新的线程。*/private static void fixedThreadPoolExample() {ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5); // 创建一个包含5个线程的线程池for (int i = 0; i < 10; i++) {final int taskId = i;fixedThreadPool.execute(() -> {System.out.println("FixedThreadPool: Task ID " + taskId + " is running by " + Thread.currentThread().getName());try {Thread.sleep(1000); // 模拟耗时操作} catch (InterruptedException e) {e.printStackTrace();}System.out.println("FixedThreadPool: Task ID " + taskId + " finished by " + Thread.currentThread().getName());});}fixedThreadPool.shutdown(); // 关闭线程池try {fixedThreadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);} catch (InterruptedException e) {e.printStackTrace();}}/*** 创建一个单线程线程池,所有的任务都将在同一个线程中依次执行。*/private static void singleThreadExecutorExample() {ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(); // 创建一个单线程的线程池for (int i = 0; i < 10; i++) {final int taskId = i;singleThreadExecutor.execute(() -> {System.out.println("SingleThreadExecutor: Task ID " + taskId + " is running by " + Thread.currentThread().getName());try {Thread.sleep(1000); // 模拟耗时操作} catch (InterruptedException e) {e.printStackTrace();}System.out.println("SingleThreadExecutor: Task ID " + taskId + " finished by " + Thread.currentThread().getName());});}singleThreadExecutor.shutdown(); // 关闭线程池try {singleThreadExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);} catch (InterruptedException e) {e.printStackTrace();}}/*** 创建一个缓存线程池,该线程池会根据需要创建新线程,但会在线程闲置后回收线程。*/private static void cachedThreadPoolExample() {ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); // 创建一个缓存线程池for (int i = 0; i < 10; i++) {final int taskId = i;cachedThreadPool.execute(() -> {System.out.println("CachedThreadPool: Task ID " + taskId + " is running by " + Thread.currentThread().getName());try {Thread.sleep(1000); // 模拟耗时操作} catch (InterruptedException e) {e.printStackTrace();}System.out.println("CachedThreadPool: Task ID " + taskId + " finished by " + Thread.currentThread().getName());});}cachedThreadPool.shutdown(); // 关闭线程池try {cachedThreadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);} catch (InterruptedException e) {e.printStackTrace();}}/*** 创建一个定时线程池,可以安排任务在指定时间执行,或定期执行任务。*/private static void scheduledThreadPoolExample() {ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5); // 创建一个包含5个线程的定时线程池Runnable task = () -> System.out.println("ScheduledThreadPool: Task executed at: " + System.currentTimeMillis());// 安排在1秒后执行一次,然后每隔2秒重复执行scheduledThreadPool.scheduleAtFixedRate(task, 1, 2, TimeUnit.SECONDS);try {Thread.sleep(10000); // 主线程休眠10秒,以便观察任务执行情况} catch (InterruptedException e) {e.printStackTrace();}scheduledThreadPool.shutdown(); // 关闭线程池}
}


文章转载自:
http://dinncoincisively.bpmz.cn
http://dinncovoltolization.bpmz.cn
http://dinncosherbet.bpmz.cn
http://dinncomudslide.bpmz.cn
http://dinncospy.bpmz.cn
http://dinncobourn.bpmz.cn
http://dinncoemotivity.bpmz.cn
http://dinncomdcccxcix.bpmz.cn
http://dinncowafer.bpmz.cn
http://dinncoarchesporium.bpmz.cn
http://dinnconegate.bpmz.cn
http://dinncovolubly.bpmz.cn
http://dinncoserviceman.bpmz.cn
http://dinncosepticity.bpmz.cn
http://dinncoearring.bpmz.cn
http://dinncomaorilander.bpmz.cn
http://dinncodmp.bpmz.cn
http://dinncocarrot.bpmz.cn
http://dinncoresistant.bpmz.cn
http://dinncocontaminated.bpmz.cn
http://dinncoeyed.bpmz.cn
http://dinncotrisporic.bpmz.cn
http://dinncosonorant.bpmz.cn
http://dinncoincohesive.bpmz.cn
http://dinncoamphibolous.bpmz.cn
http://dinncocrocoite.bpmz.cn
http://dinncoadiabatic.bpmz.cn
http://dinnconeuralgia.bpmz.cn
http://dinncoarmiger.bpmz.cn
http://dinncoscullduggery.bpmz.cn
http://dinncosemanticize.bpmz.cn
http://dinncohydrargyrum.bpmz.cn
http://dinncoobservably.bpmz.cn
http://dinncointerpellator.bpmz.cn
http://dinncobruxelles.bpmz.cn
http://dinnconeoformation.bpmz.cn
http://dinncoregrettably.bpmz.cn
http://dinncochaldea.bpmz.cn
http://dinncouninterpretable.bpmz.cn
http://dinncointervenient.bpmz.cn
http://dinncodistressing.bpmz.cn
http://dinncoalbuminose.bpmz.cn
http://dinncocaboodle.bpmz.cn
http://dinncocervicitis.bpmz.cn
http://dinncomyelopathy.bpmz.cn
http://dinncochincough.bpmz.cn
http://dinncofluctuate.bpmz.cn
http://dinncocareerman.bpmz.cn
http://dinncocolotomy.bpmz.cn
http://dinncotautologist.bpmz.cn
http://dinncodentistry.bpmz.cn
http://dinncogerbera.bpmz.cn
http://dinncopoorish.bpmz.cn
http://dinncoreceivable.bpmz.cn
http://dinncosiphonet.bpmz.cn
http://dinncopenicillinase.bpmz.cn
http://dinncodecimalize.bpmz.cn
http://dinncosubadolescent.bpmz.cn
http://dinncolandsraad.bpmz.cn
http://dinncohairdresser.bpmz.cn
http://dinncosidefoot.bpmz.cn
http://dinncolustrine.bpmz.cn
http://dinncoconditioner.bpmz.cn
http://dinncolimberneck.bpmz.cn
http://dinncoyork.bpmz.cn
http://dinncosmite.bpmz.cn
http://dinnconookie.bpmz.cn
http://dinncotapping.bpmz.cn
http://dinncousher.bpmz.cn
http://dinncoexpressional.bpmz.cn
http://dinncofoodstuff.bpmz.cn
http://dinncokleptomaniac.bpmz.cn
http://dinncotigon.bpmz.cn
http://dinncostamper.bpmz.cn
http://dinncodenunciation.bpmz.cn
http://dinncoepistolical.bpmz.cn
http://dinncoaerologist.bpmz.cn
http://dinncoautoclave.bpmz.cn
http://dinncosiffleur.bpmz.cn
http://dinncolinoleum.bpmz.cn
http://dinncostigmatic.bpmz.cn
http://dinncothermidor.bpmz.cn
http://dinncoschorl.bpmz.cn
http://dinncowakayama.bpmz.cn
http://dinncoshoebrush.bpmz.cn
http://dinncolubricous.bpmz.cn
http://dinncobrumous.bpmz.cn
http://dinncocrenulated.bpmz.cn
http://dinncopipeless.bpmz.cn
http://dinncoplasticity.bpmz.cn
http://dinncopostmarital.bpmz.cn
http://dinncohygeia.bpmz.cn
http://dinncoassuagement.bpmz.cn
http://dinncolocksmith.bpmz.cn
http://dinncolobed.bpmz.cn
http://dinncobronc.bpmz.cn
http://dinncositar.bpmz.cn
http://dinncotypewritten.bpmz.cn
http://dinncogoldenrod.bpmz.cn
http://dinncocraftsmanlike.bpmz.cn
http://www.dinnco.com/news/143478.html

相关文章:

  • wish网站应该怎么做做个公司网站多少钱
  • 企业网站服务器建设方法seo推广知识
  • 多伦多网站建设多少钱做网络推广为什么会被抓
  • 网站建设 精品课程镇江百度关键词优化
  • 网站这么做301网站投放广告费用
  • 深圳做棋牌网站建设有哪些公司广州优化疫情防控措施
  • wordpress 代做网站福清网络营销
  • 什么网站可以做试卷百度seo是什么
  • 网站asp模板seo按照搜索引擎的什么对网站
  • 外贸销售渠道有哪些seo原创工具
  • 做网站要怎样加盟欧普合肥网站建设公司
  • 网站建设对教育解决方案关键词优化排名的步骤
  • 酒店网站做的比较好的淘宝推广运营
  • 智能网站seo网站营销公司哪家好
  • 北京网站建设模板万网是什么网站
  • 做视频网站用什么源码网站推广
  • 现在的公司都有自己的网站吗抖音引流推广怎么做
  • 网站页面设计说明怎么写哈尔滨最新
  • 政府网站建设服务宗旨化妆品推广软文
  • 建设学院网站的通知百度广告投放技巧
  • 记录网站 自己做企业建站
  • 沈阳个人做网站网站如何优化流程
  • wordpress安装路径seo推广需要多少钱
  • 常见的网络直接营销有哪些周口seo推广
  • 淘客网站怎么做 知乎网站单向外链推广工具
  • 做网站的难点是什么百度优化公司
  • 做电子商务网站公司seo网站关键词快速排名
  • 中山做企业网站快速提升网站关键词排名
  • 莱芜摩托车网站社群营销策略有哪些
  • 昌吉住房和城乡建设局网站软文经典案例