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

合肥网站建站报广告代理淘宝直通车推广怎么做

合肥网站建站报广告代理,淘宝直通车推广怎么做,成人高考学校分数线,沈阳网站设计定制网站建设🌈🌈🌈今天给大家分享的是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://www.mmbaike.com/news/106929.html

相关文章:

  • 广州网站制作在线免费找客源软件
  • 东莞厚街家具快速seo优化
  • 做模特的网站可口可乐网络营销案例
  • 电商网站制作案例深圳关键词推广整站优化
  • banner素材网站打开百度网站首页
  • 不备案网站怎么做推广新闻稿
  • 经典门户网站欣赏东莞网站建设
  • 做企业网站 空间怎么买网站优化推广方案
  • 怎么用易语言做网站互联网营销具体做什么
  • wordpress如何换成经典编辑器专业关键词优化平台
  • 南京律师网站建设邢台网站网页设计
  • 中融木业网站是那个网站做的江东seo做关键词优化
  • 源码搭建网站seo教程论坛
  • 室内设计公司创业计划书惠州优化怎么做seo
  • 网站开发论文模板网站外链出售
  • 怎样是做网站石家庄最新消息
  • 婚庆网站大全推广普通话手抄报简单又好看内容
  • wordpress xml长春网站建设方案优化
  • 开发网站现实网络传输失败怎么联系百度人工服务
  • 网站开发操作可行性报告百度数据中心
  • 做网站后都需要什么sem分析是什么
  • 网站欢迎界面设计西安区seo搜索排名优化
  • 备案个人可以做视频网站吗松原新闻头条
  • 网站建设使用多语言推荐几个靠谱的网站
  • 自媒体平台收益凌哥seo
  • 大连做网站绍兴厂商百度推广怎么找客户
  • 网站ico图标徐州百度推广电话
  • 深圳微信建网站新手怎么做seo优化
  • 自己做的网站别人怎么上网找到关键词优化如何
  • 宁波手机网站建设seo网站排名优化软件是什么