zoukankan      html  css  js  c++  java
  • 线程池

    因为删除和新建线程都是费时的工作,所以可以使用线程池ExecutorService重用线程。把
    要执行的任务放到线程池,让它自己调度这些任务。这些任务是轻量级线程。
    有两种线程池,它们使用不同的方式创建。两种方式创建线程池。

    int threads = 4;
    ExecutorService es = Executors.newFixedThreadPool(threads);

    有大量任务要执行的线程池用newCachedThreadPool创建。

    ExecutorService service = Executors.newCachedThreadPool();

    创建一个可根据需要创建新线程的线程池,但是如果以前构造的线程可用时,就重用它们。
    将长期不用的线程从线程池删除,也就是删除60秒内没有用过的线程。就好像超市收银柜台数
    量是动态的,顾客多就多开几个,顾客少就少开几个收银柜台。
    newFixedThreadPool用于少数几个长期运行的任务的线程池。

    ExecutorService service = Executors.newFixedThreadPool(2);

    newFixedThreadPool会重用已有的线程,但是不会创建新的线程。如果其中一个线程因为
    错误而结束了,将会创建一个新的接替它执行后续的任务。就好像在球场上的篮球运动员数量
    是固定的,如果有人受伤下场,就会有候补队员接替。

    可以使用线程池执行一组任务,最简单的任务不返回值给主调线程。要返回值的任务可以
    实现Callable<T>接口,线程池执行任务并通过Future<T>的实例获取返回值。

    Callable是类似于Runnable的接口,在其中定义可以在线程池中执行的任务。Future表示
    异步计算的结果,它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。
    Future的cancel方法表示取消任务的执行,cancel方法有一个布尔参数,当参数为true时,表
    示立即中断任务的执行;当参数为false时,表示允许正在运行的任务运行完成。Future的get
    方法表示等待计算完成,获取计算结果。

  • 相关阅读:
    hdu 1181 (搜索BFS,深搜DFS,并查集)
    [置顶] ZSTACK之OSAL_Nv非易失性存储解读上
    Android中利用Fragment显示为两屏
    WCF也可以做聊天程序
    Myeclipse 连接MSSqlServer
    Mysql和Oracle的卸载
    第 5堂作业
    hdu 3421 Max Sum II
    【求助】一个菜鸟java作业,帮忙看一下错在哪儿,题目是判断回文数
    netcat使用
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7824863.html
Copyright © 2011-2022 走看看