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

建设部网站查询通报查关键词排名工具app

建设部网站查询通报,查关键词排名工具app,迁安做网站哪家好,网站功能的介绍目录 1.什么是线程池 2.为什么要使用线程池 3.怎么使用线程池 4.自定义一个线程池 5.为什么不推荐使用系统自带的线程池 5.1线程池构造方法的参数和含义 5.1.1拒绝策略 5.2线程池的工作原理 5.3为什么不适用系统自带的线程池 补充:工厂模式 1.什么是线程池…

目录

1.什么是线程池

2.为什么要使用线程池

3.怎么使用线程池

4.自定义一个线程池

5.为什么不推荐使用系统自带的线程池

5.1线程池构造方法的参数和含义

5.1.1拒绝策略

5.2线程池的工作原理

5.3为什么不适用系统自带的线程池

补充:工厂模式


1.什么是线程池

在JDBC编程中,通过DataSource获取Connection连接的时候就已经用到了的概念,当Java程序需要数据库连接的时候就从池中拿一个空闲的连接对象给Java程序,Java程序用完了连接之后就会返回给连接池。

线程池就是在池中放的是线程本身,当程序启动的时候就创建出若干个线程,如果有任务就处理,没有任务就等待。

百度百科的定义为:

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。

2.为什么要使用线程池

使用线程池可以减少系统创建线程的损耗。

如下图:创建线程需要申请PCB

 线程池的作用就是为了减少这些关于申请和释放PCB的操作,尽量保证我们的程序在用户态执行,不牵扯到硬件层面。

3.怎么使用线程池

JDK给我们提供了一些方法来创建线程池:

        // 1. 用来处理大量短时间工作任务的线程池,如果池中没有可用的线程将创建新的线程,如果线程空闲60秒将收回并移出缓存ExecutorService cachedThreadPool = Executors.newCachedThreadPool();// 2. 创建一个操作无界队列且固定大小线程池ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);// 3. 创建一个操作无界队列且只有一个工作线程的线程池ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();// 4. 创建一个单线程执行器,可以在给定时间后执行或定期执行。ScheduledExecutorService singleThreadScheduledExecutor = Executors.newSingleThreadScheduledExecutor();// 5. 创建一个指定大小的线程池,可以在给定时间后执行或定期执行。ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);// 6. 创建一个指定大小(不传入参数,为当前机器CPU核心数)的线程池,并行地处理任务,不保证处理顺序Executors.newWorkStealingPool();

这里使用第2个方法进行基本使用示例:

先创建一个线程池:

//创建一个线程池
ExecutorService threadPoll= Executors.newFixedThreadPool(3);

此时线程池中已经存在了一些创建好的线程,只需要往线程池中提交任务即可。

这里采用for循环,提交十个任务(打印“我是任务几”):

        //提交任务到线程池for (int i = 0; i < 10; i++) {int taskId = i;threadPoll.submit(() -> {System.out.println("我是任务 " + taskId + ","+"Thread.currentThread().getName());});}

 任务被提交到线程池后,任务就会被自动执行。

4.自定义一个线程池

1.可以提交任务到线程池,那么就会有一种数据结构来保存我们提交的任务,这里可以考虑用阻塞队列来保存任务。

2.创建线程池需要指定初始线程数量,这些线程不停的扫描阻塞队列,如果有任务就立即执行。可以考虑使用线程池对象的构造方法,接收要创建线程的数量,并在构造方法中完成线程的创建。

实现过程:

1.定义一个阻塞队列来保存我们的任务

    //1.定义一个阻塞队列BlockingDeque<Runnable>queue=new LinkedBlockingDeque<>(3);

2.定义一个方法提交任务

    //2.对外提供一个方法用来往队列中提交任务public void submit(Runnable task) throws InterruptedException {queue.put(task);}

3.定义构造方法

    //3.构造方法,完成线程的创建,扫描队列,取出任务并执行public MyThreadPoll(int capacity){if(capacity<=0){throw new RuntimeException("线程数量不能小于0");}for (int i = 0; i < capacity; i++) {Thread thread=new Thread(()->{while(true) {try {//取出任务Runnable take = queue.take();//执行任务take.run();} catch (InterruptedException e) {throw new RuntimeException(e);}}});//启动线程thread.start();}}

测试一下代码:

    public static void main(String[] args) throws InterruptedException {//创建自定义的线程池MyThreadPoll myThreadPoll=new MyThreadPoll(3);//往线程池中提交任务for (int i = 0; i < 10; i++) {int taskId=i;myThreadPoll.submit(()->{System.out.println("我是任务 " + taskId + ", " + Thread.currentThread().getName());});}}

执行成功,测试通过。

5.为什么不推荐使用系统自带的线程池

5.1线程池构造方法的参数和含义

通过工厂方法获取的线程池,最终都是ThreadPoolExecutor类的对象。

ThreadPoolEexecutor各参数含义:

corePoolSize:核心线程数,创建线程池时包含的最小线程数量

maximumPoolSize:最大线程数,也可以叫做临时线程数,当核心数不够用的时候,允许系统可以创建的最多线程数是多少

keepAliveTime:临时线程空闲的时长

TimeUnit unit:空闲的时间单位,和keepAliveTime配合使用

BlockingQueue<Runnable>workQueue:用来保存任务的阻塞队列

ThreadFactory:线程工厂,如何去创建线程,用系统默认的就可以

RejectedExecutionHandler:拒绝策略,触发的时机,当线程池处理不了过多的任务时触发

 举例说明:

5.1.1拒绝策略

拒绝策略有4中,根据自己的业务场景选择合适的拒绝策略即可。

5.2线程池的工作原理

这七个参数搭配使用:

1.当任务添加到线程池中时,先判断任务数是否大于核心线程数

2.如果不大于直接执行,否则加入阻塞队列

3.当阻塞队列满了之后,会按指定的线程最大数创建临时线程

4.当阻塞队列满了,而且临时线程也创建完成,再提交任务时,执行拒绝策略

5.当任务减少,临时线程达到空闲时长时,会被回收

5.3为什么不适用系统自带的线程池

 

 

补充:工厂模式

工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。

先来看看一个代码示例:

定义一个Student类,定义有参构造

由于重载过程,参数列表相同而报错 。

使用工厂方法:

 

http://www.hkea.cn/news/564757/

相关文章:

  • 做网站如何网站考虑优化游戏推广员是诈骗吗
  • 公众号做视频网站吗关键词排名怎么做上首页
  • 重庆做网站价格优化软件下载
  • 如何做网站镜像今日最火的新闻
  • 水果网站开发所需的成本市场营销实际案例
  • 无锡市新吴区住房和建设交通局网站西安百度关键词包年
  • 网站平台方案设计seo上首页
  • 郑州做网站的联系方式搜狗友链交换
  • 一般建设一个网站多少钱怎么接广告赚钱
  • 计算机专业网站开发方向销售推广方案
  • 上海网站建设公司排名西安百度公司
  • 中国网网址是多少网站推广优化教程
  • 关于加强机关网站建设运营培训
  • dw做的网站怎么让别人看到如何建立一个网站
  • 保险网站建设优缺点seo代码优化步骤
  • 如何快速建网站百度电脑版入口
  • 山东省建设工程信息网站最近最新的新闻
  • 免费网站建设方案锦绣大地seo官网
  • 电子商务的网站建设牛排seo系统
  • 资源收费网站怎么做网站快速优化排名官网
  • 招标网哪个网站信息可靠百度站长工具网站
  • 郑州七七网站建设互联网推广公司
  • 佛山做外贸网站代理商百度收录技术
  • 公司网站建设需要什么今日热搜第一名
  • 烟台建设企业网站网站快速收录入口
  • 怎么做繁体字网站网络营销公司注册找哪家
  • 做ppt介绍网站吗网站搜索引擎优化工具
  • 深圳网站建设有没有市场百度搜索推广的五大优势
  • 网站建设好的图片百度互联网营销
  • 柳州网站制作公司seo优化什么意思