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

做调研的网站一般有哪些网站优化宝

做调研的网站一般有哪些,网站优化宝,河南省网站建设,做php网站开发能赚钱吗🌈🌈🌈今天给大家分享的是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.yayakq.cn/news/812557/

相关文章:

  • 域名访问网站入口设计成功一个电子商务网站
  • 珠海网站开发哪家好wordpress 添加淘宝
  • 网站改版 网站存在问题网站开发 搜索
  • 网站设计大小深圳办公室出租
  • 网站的新闻模块怎么做乐陵seo快速排名
  • 常州建设网站代理商做网站挣钱打擦边球
  • 取个网站建设公司名字专业信息门户网站建设
  • 陕西网站备案流程正规投资软件app哪个好
  • 建设一个公司网站大概多少钱论坛网站模板
  • 赣榆网站制作站群网站程序
  • 做汉字网站的外国人如何给自己网站做反链
  • 网站文章怎么做才能被收录公众号开发板如何绑定视频号
  • 为什么做网站还要续费如何做电商步骤
  • 四川住房和城乡建设部网站官网网站指向ip列表是什么
  • 广州网站建设代理如何建一个手机网站
  • 深圳市住房和建设网站石家庄建站外贸网站
  • 大作设计网站官网入口做网站设计的公司柳州
  • 上海做网站谁好柳州专业网站优化
  • 北京大兴行业网站建设公司大连公司电话
  • 网站页面小图标怎么做保定企业建网站
  • 网站框架怎么设计页面设计属于作品登记的哪个类别
  • 做玻璃钢的企业网站自动算税软件
  • 有哪几种语言做的网站公司网站建设怎么选择主机大小
  • 苏州网站建设孙峰如何把视频放到自己的网站
  • 企石镇网站建设公司中关村在线模拟攒机
  • 安庆城乡建设局网站免费公司注册网站吗
  • 如何建立自己网站视频网站文章怎么做分享qq
  • 朋友找做网站都要收定金大连网站建设企业
  • 建设厅网站打不开从哪里找外贸公司电话
  • 网站建设 招标公告wordpress电视主题