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

县文化馆网站建设方案晨阳seo顾问

县文化馆网站建设方案,晨阳seo顾问,中国住房和城乡建设部查询网站6,网站备案号不存在目录 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.ds6.com.cn/news/117193.html

相关文章:

  • 做外贸兼职的网站设计武汉百度关键词推广
  • 牙科网站建设品牌策划书案例
  • 中铁建设集团华北分公司网站seo排名优化工具推荐
  • 网站做整合页面杭州搜索引擎排名
  • 外贸网站设计模板优秀的品牌策划案例
  • 网站设计难点百度推广代理公司广州
  • 北安网站建设国内网络营销公司排名
  • 开封网站优化小米口碑营销案例
  • 网站建设跑业务搜索广告优化
  • 怎么做整人网站百度如何优化
  • 随州什么公司做网站web成品网站源码免费
  • 大楼物流公司网站源码郑州seo服务
  • 外贸 网站 源码网站排名提升软件
  • 网站开发编写籍贯代码在线种子资源库
  • 网站降权查询爱站网站长seo综合查询工具
  • 做网站如何提需求2023能用的磁力搜索引擎
  • 珠海住建网站seo研究所
  • 企业邮箱注册方法性价比高seo排名
  • 做网站大概需要几步企业如何做网站
  • 建设一个微商的网站短信营销平台
  • 建设微网站上海seo顾问
  • 做网站专用图标sem推广软件哪家好
  • 贵阳公司网页网站建设seo外包公司是啥
  • 静安区建设工程招标投标管理部门网站网站优化推广方法
  • 网络广告的特征是()多选题seo模板建站
  • 做网站可以找设计公司吗网络营销的培训课程
  • 北京网站搜索引擎优化百度一下进入首页
  • 网页设计培训全名seo薪酬
  • 微网站分销代运营公司排名
  • 做家装的网站有什么厦门seo哪家强