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

怎么建立企业网站做信息类网站

怎么建立企业网站,做信息类网站,网站搭建服务平台,ui培训班哪里比较好Java线程池知识点梳理 什么是线程池#xff1f; 线程在系统中创建的成本是相对比较高的#xff0c;所以使用”池化“的思想#xff0c;设计线程池#xff0c;有大量任务需要执行时#xff0c;可以直接从线程池中使用已经创建好的线程直接去执行。减少线程的创建和销毁带…Java线程池知识点梳理 什么是线程池 线程在系统中创建的成本是相对比较高的所以使用”池化“的思想设计线程池有大量任务需要执行时可以直接从线程池中使用已经创建好的线程直接去执行。减少线程的创建和销毁带来的开销线程池通过工作队列和线程管理来实现高效的任务执行。使用少量的线程数满足最大的吞吐量。 线程池的主要组成部分包括工作线程、任务队列、线程管理器等。线程池的设计有助于优化多线程程序的性能和资源利用同时简化了线程的管理和复用的复杂性。 线程池的实现 Java线程池的核心实现类是ThreadPoolExecutor主要类图如下 #mermaid-svg-AM4beUXg2TMPKwD2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-AM4beUXg2TMPKwD2 .error-icon{fill:#552222;}#mermaid-svg-AM4beUXg2TMPKwD2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-AM4beUXg2TMPKwD2 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-AM4beUXg2TMPKwD2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-AM4beUXg2TMPKwD2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-AM4beUXg2TMPKwD2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-AM4beUXg2TMPKwD2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-AM4beUXg2TMPKwD2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-AM4beUXg2TMPKwD2 .marker.cross{stroke:#333333;}#mermaid-svg-AM4beUXg2TMPKwD2 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-AM4beUXg2TMPKwD2 g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-AM4beUXg2TMPKwD2 g.classGroup text .title{font-weight:bolder;}#mermaid-svg-AM4beUXg2TMPKwD2 .nodeLabel,#mermaid-svg-AM4beUXg2TMPKwD2 .edgeLabel{color:#131300;}#mermaid-svg-AM4beUXg2TMPKwD2 .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-AM4beUXg2TMPKwD2 .label text{fill:#131300;}#mermaid-svg-AM4beUXg2TMPKwD2 .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-AM4beUXg2TMPKwD2 .classTitle{font-weight:bolder;}#mermaid-svg-AM4beUXg2TMPKwD2 .node rect,#mermaid-svg-AM4beUXg2TMPKwD2 .node circle,#mermaid-svg-AM4beUXg2TMPKwD2 .node ellipse,#mermaid-svg-AM4beUXg2TMPKwD2 .node polygon,#mermaid-svg-AM4beUXg2TMPKwD2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-AM4beUXg2TMPKwD2 .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-AM4beUXg2TMPKwD2 g.clickable{cursor:pointer;}#mermaid-svg-AM4beUXg2TMPKwD2 g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-AM4beUXg2TMPKwD2 g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-AM4beUXg2TMPKwD2 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-AM4beUXg2TMPKwD2 .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-AM4beUXg2TMPKwD2 .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-AM4beUXg2TMPKwD2 .dashed-line{stroke-dasharray:3;}#mermaid-svg-AM4beUXg2TMPKwD2 #compositionStart,#mermaid-svg-AM4beUXg2TMPKwD2 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-AM4beUXg2TMPKwD2 #compositionEnd,#mermaid-svg-AM4beUXg2TMPKwD2 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-AM4beUXg2TMPKwD2 #dependencyStart,#mermaid-svg-AM4beUXg2TMPKwD2 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-AM4beUXg2TMPKwD2 #dependencyStart,#mermaid-svg-AM4beUXg2TMPKwD2 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-AM4beUXg2TMPKwD2 #extensionStart,#mermaid-svg-AM4beUXg2TMPKwD2 .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-AM4beUXg2TMPKwD2 #extensionEnd,#mermaid-svg-AM4beUXg2TMPKwD2 .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-AM4beUXg2TMPKwD2 #aggregationStart,#mermaid-svg-AM4beUXg2TMPKwD2 .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-AM4beUXg2TMPKwD2 #aggregationEnd,#mermaid-svg-AM4beUXg2TMPKwD2 .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-AM4beUXg2TMPKwD2 .edgeTerminals{font-size:11px;}#mermaid-svg-AM4beUXg2TMPKwD2 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Executor execute(Runnable command) ExecutorService shutdown() isShutdown() : boolean isTerminated() : boolean submit(CallableT task) : FutureT ThreadPoolExecutor execute(Runnable command) AbstractExecutorService 线程池的状态 RUNNING 线程池一旦被创建就处于RUNNING状态任务数为0能够接收新任务对已排队的任务进行处理。SHUTDOWN不接收新任务但能处理已排队的任务。当调用线程池的shutdown()方法时线程池会由RUNNING转变为SHUTDOWN状态。STOP不接收新任务不处理已排队的任务并且会中断正在处理的任务。当调用线程池的shutdownNow()方法时线程池会由RUNNING或SHUTDOWN转变为STOP状态。TIDYING当线程池在SHUTDOWN状态下任务队列为空且执行中任务为空或者线程池在STOP状态下线程池中执行中任务为空时线程池会变为TIDYING状态会执行terminated()方法。这个方法在线程池中是空实现可以重写该方法进行相应的处理。TERMINATED线程池彻底终止。线程池在TIDYING状态执行完terminated()方法后就会由TIDYING转变为TERMINATED状态。 如何保存线程状态 ThreadPoolExecutor 源码中线程池的运行状态使用 ctl 高3位保存运行状态低29位保存有效的工作线程数 private final AtomicInteger ctl new AtomicInteger(ctlOf(RUNNING, 0));private static final int COUNT_BITS Integer.SIZE - 3;private static final int CAPACITY (1 COUNT_BITS) - 1;// runState is stored in the high-order bitsprivate static final int RUNNING -1 COUNT_BITS;private static final int SHUTDOWN 0 COUNT_BITS;private static final int STOP 1 COUNT_BITS;private static final int TIDYING 2 COUNT_BITS;private static final int TERMINATED 3 COUNT_BITS;// Packing and unpacking ctlprivate static int runStateOf(int c) { return c ~CAPACITY; }private static int workerCountOf(int c) { return c CAPACITY; }private static int ctlOf(int rs, int wc) { return rs | wc; }COUNT_BITS被定义为Integer.SIZE - 3即32位整数的29位每个线程池状态如RUNNING、SHUTDOWN等都是通过将一个整数左移COUNT_BITS位来定义的这样就把状态值放到了整数的最高3位。 例如 RUNNING状态的值为-1左移29位-1 的二进制表示为1111 1111 1111 1111 1111 1111 1111 1111共32个1。 -1 29 1110 0000 0000 0000 0000 0000 0000 0000其中高3位是111表示的就是线程池处于 RUNNING状态。 线程池核心参数 corePoolSize核心线程数空闲了也不会销毁除非设置了允许销毁核心线程allowCoreThreadTimeOut。maximumPoolSize线程池允许的最大线程数keepAliveTime当线程数大于核心线程数时多余空闲的线程在这个时间内还没有等到新任务就会被销毁unitkeepAliveTime的时间单位workQueue存放还未被线程执行的任务threadFactory线程工厂可以自定义设置线程池中线程的线程名称等handler拒绝策略但线程池无法执行新增的线程时是抛弃还是其他策略。 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueueRunnable 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;}线程池执行任务流程 当工作线程数小于核心线程数时新任务来临会启动新线程执行任务。当工作线程数大于核心线程数且小于最大线程数时新任务会保存到队列当中等待线程执行。当队列满了且核心线程数小于最大线程数时新任务会创建新线程执行。当队列已满且工作线程数达到最大线程数时线程池会触发拒绝策略由RejectedExecutionHandler处理。先线程池中线程数超过核心线程数空闲时间超过keepAliveTime时空闲线程会被销毁。 线程池拒绝策略 RejectedExecutionHandler 接口的实现类有四种所以默认有四种拒绝策略 **AbortPolicy**直接抛出异常阻止系统正常运行。可以根据业务逻辑选择重试或者放弃提交等策略。 **CallerRunsPolicy **只要线程池未关闭该策略直接在调用者线程中运行当前被丢弃的任务。 不会造成任务丢失同时减缓提交任务的速度给执行任务缓冲时间。 **DiscardOldestPolicy **丢弃最老的一个请求也就是即将被执行的任务并尝试再次提交当前任务。 **DiscardPolicy **该策略默默地丢弃无法处理的任务不予任何处理。如果允许任务丢失这是最好的一种方案。 Executors提供的几种线程池 newSingleThreadExecutor()只有一个线程的线程池任务是顺序执行适用于一个一个任务执行的场景newCachedThreadPool()线程池里有很多线程需要同时执行60s内复用适用执行很多短期异步的小程序或者负载较轻的服务newFixedThreadPool()拥有固定线程数的线程池如果没有任务执行那么线程会一直等待适用执行长期的任务。newScheduledThreadPool()用来调度即将执行的任务的线程池newWorkStealingPool()底层采用forkjoin的Deque采用独立的任务队列可以减少竞争同时加快任务处理 参数FixedThreadPoolCachedThreadPoolScheduledThreadPoolSingleThreadExecutorSingleScheduledThreadPoolcorePoolSize构造函数传入0构造函数传入11maxPoolSize同corePoolSizeInteger.MAX_VALUEInteger.MAX_VALUE1Integer.MAX_VALUEkeepAliveTime060s000 建议开发规范 阿里Java开发手册中提到【强制】线程池不允许使用 Executors 去创建而是通过 ThreadPoolExecutor 的方式这样的处理方 式让写的同学更加明确线程池的运行规则规避资源耗尽的风险。 Executors 返回的线程池对象的弊端如下 FixedThreadPool 和 SingleThreadPool允许的请求队列长度为 Integer.MAX_VALUE可能会堆积大量的请求从而导致 OOM。 CachedThreadPool允许的创建线程数量为 Integer.MAX_VALUE可能会创建大量的线程从而导致 OOM。 ScheduledThreadPool允许的请求队列长度为 Integer.MAX_VALUE可能会堆积大量的请求从而导致 OOM。 根据业务独立配置线程池将较慢服务与主线程池隔离开。 创建线程池使用线程工厂指定形成名称方便出错时排查。 线程资源必须由线程池提供不允许自行在程序中显示创建线程。
http://www.w-s-a.com/news/623303/

相关文章:

  • 做网站推广引流效果好吗电商推广技巧
  • 亦庄网站建设价格广州网站推广服务
  • 十大免费ppt网站下载重庆在线高校平台登录
  • 做环保网站案例百度seo教程
  • 体育用品网站模板网站建设话术
  • 潍坊网站建设服务商做网站多久能盈利
  • 嘉定区做网站房产信息查询官网
  • 网站直播间 是怎么做的唐山论坛建站模板
  • 深圳洲聚网站建设wordpress 泛解析
  • 五金东莞网站建设技术支持wordpress 添加模板
  • 网站申请专利春节网页设计素材
  • 进网站备案md风格的wordpress主题
  • 如何建站网站十大免费建站app
  • 工作号做文案素材的网站晋城网站设计人
  • 建设部网站官网 施工许可怎样建网站 需要
  • 什么网站都能打开的浏览器同城小程序怎么推广
  • 在电脑上怎么做网站网址seo分析
  • 石家庄做网站网络公司电子商务营销推广
  • 网站开发 前端专做婚礼logo的网站
  • 同创企业网站建设拖拽建设网站源码
  • wordpress调用网站标题网站页面排版
  • 哈尔滨营销网站建设电子商城网站开发要多少钱
  • 免费织梦导航网站模板下载地址自己建站网站
  • 获取网站访客qq号码代码做抽奖网站违法吗
  • 湖南大型网站建设公司排名偷网站源码直接建站
  • 网站建设周期规划北京网站设计必看刻
  • 如何做自己的在线作品网站深圳网站设计公司的
  • 网站开发外包公司wordpress最简单模板
  • 湖南省建设人力资源网站wordpress主机pfthost
  • 淮安软件园哪家做网站各网站特点