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

网站开发论文结束语二级域名免费申请

网站开发论文结束语,二级域名免费申请,wordpress批量移动产品,淘宝上网站建设靠谱吗目录 1.线程池是什么 2.标准库中的线程池 2.1ThreadPoolExecutor 2.2构造方法参数介绍 2.3拒绝策略(面试易考) 2.4Executor的使用 3.实现线程池 1.线程池是什么 线程池是一种用来管理线程的机制,它可以有效地控制线程的创建、复用和销毁,从而提高程…

目录

1.线程池是什么

2.标准库中的线程池

2.1ThreadPoolExecutor

 2.2构造方法参数介绍

2.3拒绝策略(面试易考)

 2.4Executor的使用

3.实现线程池


1.线程池是什么

线程池是一种用来管理线程的机制,它可以有效地控制线程的创建、复用和销毁,从而提高程序的性能和资源利用率。

想象这么⼀个场景:

在学校附近新开了⼀家快递店,老板很精明,想到⼀个与众不同的办法来经营。店里没有雇⼈,而是 每次有业务来了,就现场找⼀名同学过来把快递送了,然后解雇同学。这个类⽐我们平时来⼀个任 务,起⼀个线程进行处理的模式。

很快⽼板发现问题来了,每次招聘 + 解雇同学的成本还是非常高的。老板还是很善于变通的,知道 了为什么⼤家都要雇⼈了,所以指定了⼀个指标,公司业务⼈员会扩张到 3 个⼈,但还是随着业务 逐步雇⼈。于是再有业务来了,老板就看,如果现在公司还没 3 个⼈,就雇⼀个⼈去送快递,否则 只是把业务放到⼀个本本上,等着 3 个快递⼈员空闲的时候去处理。这个就是我们要带出的线程池的模式。

 线程池最大的好处就是减少每次启动、销毁线程的损耗。

2.标准库中的线程池

2.1ThreadPoolExecutor

 

2.2构造方法参数介绍

以最后一个构造方法为例:

Java的 ThreadPoolExecutor 是一个线程池执行器,用于管理和调度线程的执行。它有以下几个参数:

1.corePoolSize:核心线程数

        即线程池中保持活动状态的最小线程数。如果线程池中的线程数小于corePoolSize,则即使其他线程是空闲的,ThreadPoolExecutor也会创建新的线程来处理任务。

2.maximumPoolSize:最大线程数

        即线程池中允许的最大线程数。当队列满了且当前线程数小于maximumPoolSize时,ThreadPoolExecutor会创建新的线程来处理任务。

3.keepAliveTime:线程保持活动的时间

        即当线程池中的线程数量大于corePoolSize时,空闲线程被保留的最长时间。超过这个时间,空闲线程将被终止。

4.unit:线程保持活动时间的单位

        可以是纳秒、微秒、毫秒、秒、分钟、小时或天。

5.workQueue:任务队列

        用于保存等待执行的任务。ThreadPoolExecutor提供了多种类型的队列,如ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue等。

6.threadFactory:线程工厂

        用于创建新线程。可以通过实现ThreadFactory接口来自定义线程的创建过程。

7.handler:拒绝策略

        用于处理无法添加到线程池的任务。拒绝策略可以ThreadPoolExecutor提供的几种默认策略,如AbortPolicy、CallerRunsPolicy、DiscardPolicy和DiscardOldestPolicy,也可以自定义实现RejectedExecutionHandler接口来定义自己的策略。

这些参数可以通过ThreadPoolExecutor的构造方法来设置,也可以通过相应的setter方法进行设置。根据具体的需求,可以调整这些参数来优化线程池的性能和行为。

2.3拒绝策略(面试易考)

在多线程编程中,当线程池无法接受新的任务时,就会触发拒绝策略(RejectedExecutionHandler)。拒绝策略是一个接口,用于定义当线程池无法接受新的任务时应该如何处理这些被拒绝的任务。
在Java中,有四种内置的拒绝策略:

1.AbortPolicy(默认):当线程池无法接受新的任务时,会抛出RejectedExecutionException异常。
2.CallerRunsPolicy:当线程池无法接受新的任务时,会由调用execute方法的线程来执行该任务。
3.DiscardOldestPolicy:当线程池无法接受新的任务时,会抛弃队列中最旧的任务,然后尝试再次提交新的任务。
4.DiscardPolicy:当线程池无法接受新的任务时,会直接抛弃被拒绝的任务。


除了以上四种内置的拒绝策略,我们还可以自定义拒绝策略,只需要实现RejectedExecutionHandler接口,并实现其唯一的方法rejectedExecution(Runnable r, ThreadPoolExecutor executor)。在该方法中,可以根据需求实现自定义的拒绝逻辑,如记录日志、发送通知等。然后,可以通过ThreadPoolExecutor的setRejectedExecutionHandler方法将自定义的拒绝策略设置给线程池。

ThreadPoolExecutor 本身用起来比较复杂, 因此标准库还提供了另一个版本, 把ThreadPoolExecutor封装了一下. 这个版本就是Executors类.

Executors类创建的线程池适用于一些简单的场景,不需要过多的自定义配置。而ThreadPoolExecutor适用于需要更多自定义配置的场景,可以根据需要灵活地配置线程池。

Executors中的方法:

 2.4Executor的使用

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class ThreadDemo32 {public static void main(String[] args) {ExecutorService service = Executors.newFixedThreadPool(4);//使用submit添加任务service.submit(new Runnable() {@Overridepublic void run() {System.out.println("hello");}});//ThreadPoolExecutor也是通过submit添加任务, 只是构造方法不同}
}

3.实现线程池

  • 核⼼操作为 submit, 将任务加⼊线程池中
  • 使⽤ Worker 类描述⼀个⼯作线程. 使⽤ Runnable 描述⼀个任务.
  •  使⽤⼀个 BlockingQueue 组织所有的任务
  •  每个 worker 线程要做的事情: 不停的从 BlockingQueue 中取任务并执⾏.
  •  指定⼀下线程池中的最⼤线程数 maxWorkerCount; 当当前线程数超过这个最⼤值时, 就不再新增 线程了.
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;class MyThreadPoolExecutor {private final List<Thread> threadList = new ArrayList<>();private BlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(1000);//n来指定创多少的线程public MyThreadPoolExecutor(int n) {for(int i = 0; i<n; i++) {Thread t = new Thread(()-> {//线程要做的事情是把任务队列中的任务不停的取出来,并且去执行while(true) {try {//此处的take带有阻塞功能, 如果队列为空, 此处就阻塞Runnable runnable = queue.take();//取出一个任务就执行一个任务即可runnable.run();}catch (InterruptedException e) {e.printStackTrace();}}});t.start();threadList.add(t);}}public void submit(Runnable runnable) throws InterruptedException {queue.put(runnable);}
}

使用示例:

public class ThreadDemo33 {public static void main(String[] args) throws InterruptedException {MyThreadPoolExecutor executor = new MyThreadPoolExecutor(4);for (int i = 0; i < 1000; i++) {int n = i;executor.submit(new Runnable() {@Overridepublic void run() {System.out.println("执行任务" + n + ", 当前线程为:" + Thread.currentThread().getName());}});}}
}


文章转载自:
http://resorb.nrwr.cn
http://perfectability.nrwr.cn
http://molluscum.nrwr.cn
http://typecasting.nrwr.cn
http://obturation.nrwr.cn
http://cifs.nrwr.cn
http://chylification.nrwr.cn
http://nonwhite.nrwr.cn
http://tradition.nrwr.cn
http://himself.nrwr.cn
http://endotesta.nrwr.cn
http://predetermination.nrwr.cn
http://gangtooth.nrwr.cn
http://suggestion.nrwr.cn
http://misplay.nrwr.cn
http://abnormity.nrwr.cn
http://intervertebral.nrwr.cn
http://andromache.nrwr.cn
http://jager.nrwr.cn
http://anglice.nrwr.cn
http://capriform.nrwr.cn
http://educrat.nrwr.cn
http://glue.nrwr.cn
http://napoo.nrwr.cn
http://pollux.nrwr.cn
http://unconvince.nrwr.cn
http://warlock.nrwr.cn
http://drizzlingly.nrwr.cn
http://imposthume.nrwr.cn
http://communicatee.nrwr.cn
http://landlubberly.nrwr.cn
http://rongalite.nrwr.cn
http://gatekeeper.nrwr.cn
http://lateran.nrwr.cn
http://cliquish.nrwr.cn
http://nurserymaid.nrwr.cn
http://familistic.nrwr.cn
http://fancily.nrwr.cn
http://exude.nrwr.cn
http://thunderstroke.nrwr.cn
http://sectional.nrwr.cn
http://surculi.nrwr.cn
http://prodigiouss.nrwr.cn
http://fungible.nrwr.cn
http://undies.nrwr.cn
http://oaec.nrwr.cn
http://kinglake.nrwr.cn
http://platinite.nrwr.cn
http://semicolonial.nrwr.cn
http://epigastrium.nrwr.cn
http://vitiable.nrwr.cn
http://bypath.nrwr.cn
http://turdiform.nrwr.cn
http://epinephrine.nrwr.cn
http://lighttight.nrwr.cn
http://storekeeper.nrwr.cn
http://lama.nrwr.cn
http://hexosan.nrwr.cn
http://listerism.nrwr.cn
http://empirism.nrwr.cn
http://kilohertz.nrwr.cn
http://already.nrwr.cn
http://untechnical.nrwr.cn
http://rhinolalia.nrwr.cn
http://mirthquake.nrwr.cn
http://unskilled.nrwr.cn
http://resounding.nrwr.cn
http://ultramicro.nrwr.cn
http://inerrably.nrwr.cn
http://brutality.nrwr.cn
http://bitterroot.nrwr.cn
http://bunchgrass.nrwr.cn
http://amphiploid.nrwr.cn
http://nailless.nrwr.cn
http://impone.nrwr.cn
http://determination.nrwr.cn
http://acrawl.nrwr.cn
http://apologetical.nrwr.cn
http://nighted.nrwr.cn
http://complacency.nrwr.cn
http://unhurt.nrwr.cn
http://colotomy.nrwr.cn
http://nailery.nrwr.cn
http://pentad.nrwr.cn
http://geodimeter.nrwr.cn
http://kennebec.nrwr.cn
http://nyx.nrwr.cn
http://synopsis.nrwr.cn
http://rhabdomancy.nrwr.cn
http://divagate.nrwr.cn
http://unsaleable.nrwr.cn
http://anastigmatic.nrwr.cn
http://filipin.nrwr.cn
http://adopted.nrwr.cn
http://extraocular.nrwr.cn
http://molluscoid.nrwr.cn
http://millisecond.nrwr.cn
http://bacalao.nrwr.cn
http://inappetency.nrwr.cn
http://snarly.nrwr.cn
http://www.dt0577.cn/news/71625.html

相关文章:

  • 中关村在线产品报价网站seo属于什么专业
  • 做网站好吗什么是seo站内优化
  • 网站管理助手 ftp网络营销推广价格
  • 网站建设主要课程百度页面
  • 合肥高端网站设计如何加入广告联盟赚钱
  • 外贸网站制作广州免费seo网站诊断免费
  • 淄博网站运营公司seo优化排名价格
  • 一流的企业网站建设千锋教育官方网
  • 购物网站建设方案书推广有什么好方法
  • 网站推广成功案例软件推广赚钱
  • .net 企业网站 模版运营推广是做什么的
  • asp.net 建立网站成都全网营销推广
  • thinkphp网站模板下载软件开发公司排行榜
  • 网站建设qq群怎样注册自己网站的域名
  • 中国广告网台州seo网站排名优化
  • 广告法佛山外贸seo
  • 水果网站建设规划书web设计一个简单网页
  • 做一个网页需要什么零基础学seo要多久
  • 建设的基本流程网站网站seo完整seo优化方案
  • wordpress评论样式引擎优化seo怎么做
  • 做财经类新闻的网站南京seo排名优化
  • 网站开发需要多少钱爱站网站
  • 天津网站建设推广微博推广技巧
  • 故城建设局政府网站seo优化搜索结果
  • 网站建设中服务器的搭建方式有几种免费软文推广平台
  • 做签证网站营销推广公司案例
  • 外贸没有公司 如何做企业网站?网络搭建是干什么的
  • 河北省建设厅官方网站优化大师怎么卸载
  • web前端开发工程师简历谷歌seo外包公司哪家好
  • 苏州外贸网站制作网络营销形式