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

pc开奖网站建设网络连接服务

pc开奖网站建设,网络连接服务,微信小程序可视化编辑器免费,网站改版优化目录 1.什么是线程池 2.为什么要使用线程池 3.怎么使用线程池 4.自定义一个线程池 5.为什么不推荐使用系统自带的线程池 5.1线程池构造方法的参数和含义 5.1.1拒绝策略 5.2线程池的工作原理 5.3为什么不适用系统自带的线程池 补充#xff1a;工厂模式 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.定义一个阻塞队列BlockingDequeRunnablequeuenew LinkedBlockingDeque(3); 2.定义一个方法提交任务 //2.对外提供一个方法用来往队列中提交任务public void submit(Runnable task) throws InterruptedException {queue.put(task);} 3.定义构造方法 //3.构造方法完成线程的创建,扫描队列取出任务并执行public MyThreadPoll(int capacity){if(capacity0){throw new RuntimeException(线程数量不能小于0);}for (int i 0; i capacity; i) {Thread threadnew 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 myThreadPollnew MyThreadPoll(3);//往线程池中提交任务for (int i 0; i 10; i) {int taskIdi;myThreadPoll.submit(()-{System.out.println(我是任务 taskId , Thread.currentThread().getName());});}} 执行成功测试通过。 5.为什么不推荐使用系统自带的线程池 5.1线程池构造方法的参数和含义 通过工厂方法获取的线程池最终都是ThreadPoolExecutor类的对象。 ThreadPoolEexecutor各参数含义 corePoolSize:核心线程数创建线程池时包含的最小线程数量 maximumPoolSize:最大线程数也可以叫做临时线程数当核心数不够用的时候允许系统可以创建的最多线程数是多少 keepAliveTime:临时线程空闲的时长 TimeUnit unit:空闲的时间单位和keepAliveTime配合使用 BlockingQueueRunnableworkQueue用来保存任务的阻塞队列 ThreadFactory线程工厂如何去创建线程用系统默认的就可以 RejectedExecutionHandler拒绝策略触发的时机当线程池处理不了过多的任务时触发 举例说明 5.1.1拒绝策略 拒绝策略有4中根据自己的业务场景选择合适的拒绝策略即可。 5.2线程池的工作原理 这七个参数搭配使用 1.当任务添加到线程池中时先判断任务数是否大于核心线程数 2.如果不大于直接执行否则加入阻塞队列 3.当阻塞队列满了之后会按指定的线程最大数创建临时线程 4.当阻塞队列满了而且临时线程也创建完成再提交任务时执行拒绝策略 5.当任务减少临时线程达到空闲时长时会被回收 5.3为什么不适用系统自带的线程池 补充工厂模式 工厂模式是我们最常用的实例化对象模式了是用工厂方法代替new操作的一种模式。 先来看看一个代码示例 定义一个Student类定义有参构造 由于重载过程参数列表相同而报错 。 使用工厂方法
http://www.hkea.cn/news/14318029/

相关文章:

  • 网站备案背景墙深圳便宜网站建设
  • 商城网站建设与维护方案网站备案期间做什么
  • 佛山 网站设计公司wordpress主题自适应
  • 建立子目录网站做电商网站运营
  • 建一个推广网站价格石狮建设局网站
  • 变性人做欲网站带管理后台的网站
  • 短网站生成公司软文代写
  • 会泽住房和城乡建设局网站珠海互联网公司
  • 徐州智能建站怎么做宁波seo深度优化平台有哪些
  • 园林网站免费模板网络行为管理系统
  • 网站开发 阿里北京市住房和城乡建设厅官方网站
  • 深圳网站建设qwyx100wordpress year
  • 如何建设好营销网站酒店如何做网络推广
  • 长春市做网站推广河南郑州app建设网站
  • 如何查询网站的访问量查看网站的 cms
  • 上海网站建设推荐秒搜科技购物网站域名大小
  • 郑州网站建设学习开源无代码开发平台
  • 最好的网站建设团队网站建设 指标
  • 大连哪里有手机自适应网站建设班级建设怎样建立班级网站
  • 手机网站微信链接怎么做的兰州生活网
  • 个人建站网站太原市微网站建设
  • 上海建设银行官网网站6网站开发最新书籍
  • 如何查网站空间百度指数数据分析平台入口
  • 购物网站用那个软件做游戏策划
  • 大连网站制做公司如何利用网站模板做网站
  • 网站开发前端和后端哪个费时间英文网站常用字体
  • 西充县规划建设局网站网站建设单词
  • 给公司怎么做官方网站聊城网站建设设计开发公司
  • 网站案例分析湖南wordpress重定向循环
  • 网站建设的财务分析wordpress新建页面模板