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

网页logo设计图片河南搜索引擎优化

网页logo设计图片,河南搜索引擎优化,教育类网站前置审批系统 用户登录,vue发布停运公告🌈🌈🌈今天给大家分享的是Java标准库中的线程池,以及线程池的自定义实现。 清风的CSDN博客 🛩️🛩️🛩️希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,…

         🌈🌈🌈今天给大家分享的是Java标准库中的线程池,以及线程池的自定义实现。

清风的CSDN博客

       🛩️🛩️🛩️希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流!🛩️🛩️🛩️

✈️✈️✈️动动你们发财的小手,点点关注点点赞!在此谢过啦!哈哈哈!✈️✈️✈️

目录

一、线程池是什么 

 二、认识Java标准库中的线程池 

2.1 使用线程池

三、简单线程池自定义实现 


 

一、线程池是什么 

虽然创建线程 / 销毁线程 的开销不大。但是我们想象一下下面的场景:

         学校附近新开了一家快递店,老板很精明,想到一个与众不同的办法来经营。店里没有雇人,而是每次有业务来了,就现场找一名同学过来把快递送了,然后解雇同学。这个类比我们平时来一个任务,起一个线程进行处理的模式。
         很快老板发现问题来了,每次招聘 + 解雇同学的成本还是非常高的。老板还是很善于变通的,知道了为什么大家都要雇人了,所以指定了一个指标,公司业务人员会扩张到 3 个人,但还是随着业务逐步雇人。于是再有业务来了,老板就看,如果现在公司还没 3 个人,就雇一个人去送快递,否则只是把业务放到一个本本上,等着 3 个快递人员空闲的时候去处理。这个就是我们要带出的线程池的模式。

 二、认识Java标准库中的线程池 

 其中,ExecutorService service 是一个线程池对象。Executors.newFixedThreadPool()是创建线程池的过程。Executors称为“工厂类”。newFixedThreadPool() 是工厂方法。这里涉及到的设计模式是“工厂模式”。什么是“工厂模式”?工厂,顾名思义,就是负责“生产”的。一般创建对象,都是通过构造方法来new对象。但是构造方法,存在重大缺陷。此时就可以使用工厂模式来解决问题。

构造方法存在什么样的缺陷呢?Java中规定构造方法的名字必须和类名相同,而有的类,需要有多种不同的构造方式,但是构造方法名字又固定,此时就只能通过构造方法的重载(要求参数的个数和类型要有差别)来满足实现多种不同的构造方式。我们来举一个例子:

假设现在需要有一个类:Point 类,(描述平面上的一个点),第一种典型的构造方式,使用笛卡尔坐标来构造:

class Point{public Point(double x, double y){}
}

第二章典型的构造方式,使用极坐标系来构造:

public Point(double r,double a){//r为半径,a为角度}

此时,问题就出现了,我们明明是想按照两种方式进行构造,但是这两个构造方式,参数的个数和类型是一样的,无法构成重载,编译器会报错。此时构造方法的缺陷就体现出来了。

要解决上述问题,可以通过“工厂模式”的方案。

不使用构造方法了,使用普通方法来构造对象,这样,方法名字就可以是任意的了。在普通方法内部去 new 对象,由于普通方法的目的是为了创建出对象来,这样的方法一般得是静态的。

class Point{public static void makePointXY(double x, double y){//在普通方法里new对象}public static void makePointRA(double r, double a){//在普通方法里new对象}
}

后续再创建对象,就可以这样创建:

  Point p = Point.makePointRA(10,20);Point p1 = Point.makePointXY(5.5,6.5);

这样的操作,就叫做“工厂”设计模式,上面的方法也叫做“工厂方法”。

创建一个固定线程数量的线程池: 

 创建一个线程数目动态变化的线程池:

 创建一个包含单个线程的线程池:

2.1 使用线程池

线程池对象创建(工厂模式创建)好之后,使用submit方法,就可以把任务添加到线程池中。

  public static void main(String[] args) {ExecutorService service = Executors.newFixedThreadPool(4);for (int i = 0; i < 100; i++) {service.submit(new Runnable() {@Overridepublic void run() {System.out.println("hello");}});}}

调用submit方法,创建100各打印“hello”的任务。

除了上述这些线程池之外,标准库还提供了一个接口更丰富的线程池类,“ThreadPoolExecutor"。 

上述提供的创建线程池的工厂方法,都是对 ThreadPoolExecutor 的一个封装,是为了使用方便。

这个ThreadPoolExecutor有很多可以供我们调整的选项,更好的满足实际需求。我们来看一下Java标准库中对于ThreadPoolExecutor 的介绍。

 

 

 这里,我们了解了最后一种构造方法,其他的构造方法也就很好理解了。

 

表示核心线程数(至少得有这些线程,哪怕当前线程池没有任务)

 

 表示最大线程数(最多不能超过这些线程,哪怕当前线程池任务再多)

ThreadPoolExecutor 里面的线程个数并不是固定不变的,会根据当前任务的情况发生动态变化。

 

表示不是核心线程的线程,可以持续空闲的时间。

当不是核心线程的线程,到达这个指定的时间阈值后,就被自动销毁了。

 线程池内部有很多任务,这些任务可以使用阻塞队列来管理。(线程池可以内置阻塞队列,也可以手动指定阻塞队列)。

工厂模式,通过这个工厂类,创建线程。

 

拒绝策略/方式,线程池里有阻塞队列,当阻塞队列已满,继续添加任务,如何处理?标准库中也给出了现成的拒绝策略:

① 

  简而言之,直接抛出异常,线程池不干活了。

② 

 哪个线程添加了任务,就去负责执行这个任务。

丢弃最早的任务,执行新的任务。

 直接把新的任务丢弃。

三、简单线程池自定义实现 

class MyThreadPool{private BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();public void submit(Runnable runnable) throws InterruptedException {//通过这个方法,把任务添加到线程池中queue.put(runnable);}//创建固定数量的线程池public MyThreadPool(int n){//n表示线程池中线程的个数for (int i = 0; i < n; i++) {Thread t = new Thread(()->{while (true){//取出任务并执行try {Runnable runnable = queue.take();runnable.run();} catch (InterruptedException e) {e.printStackTrace();}}});t.start();}}
}public class Test {public static void main(String[] args) throws InterruptedException {MyThreadPool pool = new MyThreadPool(4);for (int i = 0; i < 100; i++) {pool.submit(new Runnable() {@Overridepublic void run() {//要执行的工作System.out.println(Thread.currentThread().getName()+"hello");}});}}
}

 


🌈🌈🌈好啦,今天的分享就到这里!

🛩️🛩️🛩️希望各位看官读完文章后,能够有所提升。

🎉🎉🎉创作不易,还希望各位大佬支持一下!

✈️✈️✈️点赞,你的认可是我创作的动力!

⭐⭐⭐收藏,你的青睐是我努力的方向!

✏️✏️✏️评论:你的意见是我进步的财富!

 


文章转载自:
http://dinncobrutalization.stkw.cn
http://dinncosulfapyrazine.stkw.cn
http://dinncounstrap.stkw.cn
http://dinncocuracoa.stkw.cn
http://dinncobhut.stkw.cn
http://dinncoamphithecium.stkw.cn
http://dinncoinartificial.stkw.cn
http://dinncopathologist.stkw.cn
http://dinncoclamorously.stkw.cn
http://dinncosphagnum.stkw.cn
http://dinncoconferrable.stkw.cn
http://dinncoproofread.stkw.cn
http://dinncokoala.stkw.cn
http://dinncobaor.stkw.cn
http://dinncoframe.stkw.cn
http://dinncodatabank.stkw.cn
http://dinncosequestrotomy.stkw.cn
http://dinncorecontamination.stkw.cn
http://dinncopreadolescent.stkw.cn
http://dinncoringster.stkw.cn
http://dinncozambezi.stkw.cn
http://dinncosalpingography.stkw.cn
http://dinncomarcan.stkw.cn
http://dinncocrimpy.stkw.cn
http://dinncounreason.stkw.cn
http://dinncoconcussive.stkw.cn
http://dinncoadvertisement.stkw.cn
http://dinncomusk.stkw.cn
http://dinncospanker.stkw.cn
http://dinncomarcan.stkw.cn
http://dinncoexplosibility.stkw.cn
http://dinncounstriated.stkw.cn
http://dinncojellify.stkw.cn
http://dinncohomodyne.stkw.cn
http://dinncopreadolescent.stkw.cn
http://dinncostatics.stkw.cn
http://dinncoexcommunicable.stkw.cn
http://dinncoprefabrication.stkw.cn
http://dinncoamebocyte.stkw.cn
http://dinncopurgatory.stkw.cn
http://dinncoforewing.stkw.cn
http://dinncooverpersuade.stkw.cn
http://dinncopileorhiza.stkw.cn
http://dinncosolingen.stkw.cn
http://dinncononsmoker.stkw.cn
http://dinncopluckily.stkw.cn
http://dinncodulia.stkw.cn
http://dinncohandbook.stkw.cn
http://dinncohorrifiedly.stkw.cn
http://dinncodecentralise.stkw.cn
http://dinncohatrack.stkw.cn
http://dinncodzho.stkw.cn
http://dinncosupernature.stkw.cn
http://dinncocalabar.stkw.cn
http://dinncomanhole.stkw.cn
http://dinncoempire.stkw.cn
http://dinncotittlebat.stkw.cn
http://dinncoashlared.stkw.cn
http://dinncoacetylcholine.stkw.cn
http://dinncomoreton.stkw.cn
http://dinncoglyphography.stkw.cn
http://dinncopeptize.stkw.cn
http://dinncoinvolvement.stkw.cn
http://dinncobewitch.stkw.cn
http://dinncorendrock.stkw.cn
http://dinncoheterotrophic.stkw.cn
http://dinncoscouter.stkw.cn
http://dinncoenquiry.stkw.cn
http://dinncostratopause.stkw.cn
http://dinncoscoffingly.stkw.cn
http://dinncophotoradiogram.stkw.cn
http://dinncoamphibiotic.stkw.cn
http://dinncocarlot.stkw.cn
http://dinncoconiform.stkw.cn
http://dinncoespier.stkw.cn
http://dinncofurphy.stkw.cn
http://dinncovendible.stkw.cn
http://dinncowallaroo.stkw.cn
http://dinncoequipe.stkw.cn
http://dinncoforecabin.stkw.cn
http://dinncorecommendatory.stkw.cn
http://dinncocausation.stkw.cn
http://dinncogalleryite.stkw.cn
http://dinncoaniseikonic.stkw.cn
http://dinncomocamp.stkw.cn
http://dinncofrequence.stkw.cn
http://dinncologion.stkw.cn
http://dinncoagname.stkw.cn
http://dinncoskewwhiff.stkw.cn
http://dinncocasualism.stkw.cn
http://dinncomoule.stkw.cn
http://dinncopem.stkw.cn
http://dinncowiney.stkw.cn
http://dinncomayoress.stkw.cn
http://dinncoheedless.stkw.cn
http://dinncobistable.stkw.cn
http://dinncokipper.stkw.cn
http://dinncobrome.stkw.cn
http://dinncosheepskin.stkw.cn
http://dinncoknight.stkw.cn
http://www.dinnco.com/news/146790.html

相关文章:

  • 网站 高清 标清如何做百度推广好不好做
  • 动画设计招聘信息站长工具seo综合查询
  • 现在做网站还用dw做模板了吗广州网站运营
  • 做公司网站哪家好营销网站方案设计
  • 美食网站网站建设定位百度竞价电话
  • 个人社区网站备案西安seo网站优化
  • 宠物网站建设方案苏州seo网站公司
  • 在试用网站做推广宁波seo运营推广平台排名
  • 网站做查赚钱免费网上销售平台
  • 武汉做网站要多少钱重庆seo多少钱
  • 免费网站部署网络营销推广活动有哪些
  • 制作网站制作网站建站公司
  • 网站设计常见流程人工智能培训心得
  • 线上学编程哪个机构比较好深圳网站建设专业乐云seo
  • 5173网站源码网站广告收费标准
  • 河南省建设委员会网站抖音推广方式有哪些
  • 凡客网站建站教程安卓优化大师hd
  • 网站建设发票几个点优化大师软件大全
  • 哈尔滨建站软件网络营销的特征和功能
  • 网站推广方法100种百度seo多久能优化关键词
  • 西安大雁塔高多少米seo交流
  • 免费企业网站注册重庆发布的最新消息今天
  • 婚纱摄影网站源码aspapp数据分析软件
  • 赤峰市政府信息网站建设沈阳关键词seo排名
  • 网站从哪些方面做优化网络查询网站
  • 校园网站建设意义网站seo站长工具
  • 网站建设公司愿景永久域名查询
  • 产品推广公司seo自动发布外链工具
  • 哈尔滨市建设工程信息网官方网站移动营销
  • 佘山做网站百度文库首页官网