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

烟台企业网站建站模板上海房产交易网站

烟台企业网站建站模板,上海房产交易网站,镇赉县做网站的,律师网站维护引子 关于线程池#xff0c;在这里写出几种最顺手的写法#xff0c;至于原理以及各种细节。放后面再填#xff1b; 经过查证#xff0c;凡是 以前new Thread#xff08;#xff09;的地方#xff0c;貌似都可以用线程池来执行#xff0c;优化内存消耗。 代码 系统提供的…引子 关于线程池在这里写出几种最顺手的写法至于原理以及各种细节。放后面再填 经过查证凡是 以前new Thread的地方貌似都可以用线程池来执行优化内存消耗。   代码 系统提供的4种预设线程池类 1      Runnable runnable new Runnable() {2 Override3 public void run() {4 Log.d(atm, 假装有执行过程·);5 }6 };7 8 //第一类9 // 全部由核心线程去实现并不会被回收没有超时限制和任务队列的限制会创建一个定长线程池 10 // 可控制线程最大并发数超出的线程会在队列中等待 11 ExecutorService fixedThreadPool Executors.newFixedThreadPool(4); 12 fixedThreadPool.execute(runnable); 13 14 //第二类 15 //该模式下线程数量不定的线程池只有非核心线程最大值为Integer.MAX_VALUE会创建一个可缓存线程池 16 // 如果线程池长度超过处理需要可灵活回收空闲线程若无可回收则新建线程 17 ExecutorService cachedThreadPool Executors.newCachedThreadPool(); 18 cachedThreadPool.execute(runnable); 19 20 //第三类 21 //该模式下核心线程是固定的非核心线程没有限制非核心线程闲置时会被回收。 22 // 会创建一个定长线程池执行定时任务和固定周期的任务 23 ScheduledExecutorService scheduledThreadPool Executors.newScheduledThreadPool(4); 24 scheduledThreadPool.schedule(runnable, 2000, TimeUnit.SECONDS);//2000ms后执行。 25 scheduledThreadPool.scheduleAtFixedRate(runnable, 10, 1000, TimeUnit.MILLISECONDS);//延迟10ms后每隔1000ms执行一次 26 27 //第四类, 28 //该模式下线程池内部只有一个线程所有的任务都在一个线程中执行会创建一个单线程化的线程池 29 // 它只会用唯一的工作线程来执行任务保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行 30 ExecutorService singleThreadExecutor Executors.newSingleThreadExecutor(); 31 singleThreadExecutor.execute(runnable);   不用系统的而是自己定义各种参数 1 import android.support.annotation.NonNull;2 3 import java.util.concurrent.Callable;4 import java.util.concurrent.Future;5 import java.util.concurrent.LinkedBlockingDeque;6 import java.util.concurrent.ThreadFactory;7 import java.util.concurrent.ThreadPoolExecutor;8 import java.util.concurrent.TimeUnit;9 import java.util.concurrent.atomic.AtomicInteger; 10 11 /** 12 */ 13 public class CustomThreadPool { 14 15 private static final int CORE_POOL_SIZE 3;//核心线程数目 16 private static final int MAX_POOL_SIZE 20;//最大线程数除了核心线程就是非核心线程 17 private static final int ALIVE_TIME 5;//非核心线程允许闲置的最大时长 18 19 private static final CustomThreadPool instance; 20 21 private final ThreadPoolExecutor pool; 22 23 static { 24 instance new CustomThreadPool(); 25 } 26 27 private CustomThreadPool() { 28 //参数逐个解析 29 /** 30 * param 核心线程的数目即使他们是闲置状态也不会被回收除非你设置 allowCoreThreadTimeOut让核心线程也有超时时间不过一般不这么做 31 * param 线程池的最大容量可以容纳核心线程和非核心线程 32 * param 当线程数目大于核心线程数这个值是被回收的最大闲置时间超出则会被回收 33 * param 超时时间的单位一般用秒或者毫秒 34 * param 等待队列当核心线程都在工作而又有新的任务需要执行这些任务则会先进入等待队列但是如果进不去或者队列满了就会尝试用非核心线程 35 * param 生成线程的工厂(一般都会自己new 一个类继承ThreadFactory) 36 * throws IllegalArgumentException 参数异常 37 * 可能抛出的异常 38 * 比如你把核心线程数设置为负数 39 * 或者超时时间设置为负数 40 * 或者最大线程数是非正数 41 * 或者最大线程数小于 核心线程数 42 * throws NullPointerException 43 * 当 工作队列是空或者 线程工厂对象是空就会报空指针 44 */ 45 pool new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE, ALIVE_TIME, TimeUnit.SECONDS, new LinkedBlockingDequeRunnable(), new MyThreadFactory()); 46 } 47 48 public static CustomThreadPool getInstance() { 49 return instance; 50 } 51 52 /** 53 * 执行无返回值 54 * 55 * param r 56 */ 57 public void execute(Runnable r) { 58 pool.execute(r); 59 } 60 61 /** 62 * 提交有返回值 63 * 64 * param r 65 * return 66 */ 67 public FutureString submit(Runnable r, String s) { 68 return pool.submit(r, s); 69 } 70 71 public FutureString submit(CallableString callable) { 72 return pool.submit(callable); 73 } 74 75 private class MyThreadFactory implements ThreadFactory { 76 77 private final AtomicInteger mCount new AtomicInteger(1); 78 79 Override 80 public Thread newThread(NonNull Runnable r) { 81 Thread thread new Thread(r, GWThreadPool- mCount.getAndIncrement()); 82 thread.setPriority(Thread.NORM_PRIORITY - 1); 83 thread.setDaemon(false); 84 return thread; 85 } 86 } 87 88 }   带返回值的执行以及不带返回值的执行 1 private void test2() {2 //如果你想执行一个带返回值的任务任务执行完成之后返回结果用下面的代码3 try {4 CallableString callable new CallableString() {// 注意这里不是Runnable而是Callable5 Override6 public String call() {7 return 哈哈哈;8 }9 }; 10 11 //如果你想执行任务并且要取执行完成之后的返回值用submit吧 12 FutureString s CustomThreadPool.getInstance().submit(callable);//执行,submit 有返回值 13 //下面有5个API可供调用 14 /** 15 * 尝试取消任务的执行。这种尝试将会失败当任务已经完成已经被取消或者因为某种原因不能被取消。 16 * 如果成功取消这个任务还没开始的话那这个任务将永远不会执行 17 * 如果任务已经开始那就要 mayInterruptIfRunning 参数值将会决定是否要尝试去终止任务true尝试终止false不去尝试;至于为什么这里是尝试而不是一定终止参照本段开头 18 * 当这个方法返回后来的调用isDone将会永远返回true也就是说取消也算做是完成 19 * 后来的调用isCanceled 将会永远返回true如果这个方法返回true的话。 20 * param mayInterruptIfRunning 是否执行这个任务线程的线程能够被中断true能够中断false将会继续执行直到完成 21 * return 返回值false如果这个任务不能被取消典型的就是这个任务已经完成了·· 其他情况返回true 22 */ 23 s.cancel(true);// 取消任务参数的意思是:是否允许在执行过程中中断 如果true不管是不是已经开始任务都让他终止false如果已经开始了就不终止了 24 s.isDone();//是否已完成 25 s.isCancelled();// 是否已经被取消 26 27 String result s.get();// 获取执行的结果如果任务尚未执行完成有可能会阻塞一段时间 28 String result2 s.get(3, TimeUnit.SECONDS);//最多等待3秒get的重载方法因为有可能会阻塞阻塞的时长不定所以提供一个重载方法指定阻塞的最大时间 29 30 //如果你只是想执行任务不想要返回值那么用execute 31 Runnable runnable new Runnable() { 32 Override 33 public void run() { 34 Log.d(hahaha, 假装这里有代码); 35 } 36 }; 37 CustomThreadPool.getInstance().execute(runnable); 38 39 } catch (InterruptedException e) { 40 e.printStackTrace(); 41 } catch (ExecutionException e) { 42 e.printStackTrace(); 43 } catch (TimeoutException e) { 44 e.printStackTrace(); 45 } 46 }  转载于:https://www.cnblogs.com/hankzhouAndroid/p/9505423.html
http://www.pierceye.com/news/546222/

相关文章:

  • 网站建设基础心得蓝色的包装材料企业网站模板
  • thinkphp网站开发实战教程做厂房出租有那些推广网站
  • 怎么设自己的网站wordpress后台登陆很慢
  • 响水做网站网站方案书什么东西
  • 青岛seo网站排名优化wordpress页面伪静态
  • 汕尾东莞网站建设wordpress 反斜杠
  • 免费养殖网站模板jquery 的网站模板下载地址
  • 东莞市手机网站建设wordpress异步上传图片
  • 网站阵地建设管理郑州做网站多少钱
  • 自建站平台官方网站建设手机银行
  • 手机端的网站怎么做的苏州网站开发建设
  • wordpress 中型网站重庆seo网站管理
  • 网站有那些风格佛山小程序开发公司
  • 摄影网站制作长春网站建设哪家好
  • 制作社交网站wordpress 自定义文章类型 分页
  • 网站建设服务平台网站免费推广策划方案
  • 福田网站建设电话烟台艺术学校官网
  • iis上部署手机网站网页网站自做全搞定
  • 推荐成都网站建设四川seo推广方案
  • python做网站步骤您的php似乎没有安装运行wordpress所必需的mysql扩展
  • 汕头网站快速排名优化无极网站维护
  • 青岛胶南做网站的赣州章贡区人口
  • 株洲市建设质监站网站高端网站设计理念
  • 俄语网站推广视频聚合网站怎么做不侵权
  • 电商网站 建设目标详细说明ppt公司简介页面设计
  • 制作网站需要学什么软件爱站网关键词查询网站
  • 湘潭网站建设 就找磐石网络网站建设与网络编辑综合实训课程指导手册pdf
  • 生产企业做网站有用吗做公众号编辑用什么网站
  • 宜春做网站的公司wordpress博客下载插件
  • python创建网站网站开发技术与开发环境