zoukankan      html  css  js  c++  java
  • 19.线程池的使用

    Executor框架

        1.为了更好的控制多线程,jdk并发包的核心,其中一部分比较重要的类:Excutor,帮助开发人员有效控制多线程、作为线程工厂的角色。

    Executors创建线程static方法

        1.newFixedThreadPool(),该方法返回一个固定的线程池,线程池的的固定数量是始终不变的,若当有一个任务提交的时候,线程池空闲线程则立即去
            执行;若任务为空,则会被暂缓到一个任务队列里面,则会一直等待有空闲的线程去执行。
        底层实现:
        
        2.newSingleThreadExecutor(),创建一个单个的线程池。若空闲则去执行,否则暂缓任务队列。
        底层实现:
        
        3.newCachedThreadPool(),返回一个可根据实际的线程个数去自动调整的线程池,不限制最大线程数量,若有空闲线程则执行任务,若无任务则不创建
           新的线程,并且每个线程空闲的都被在60秒内被回收。
        底层实现:
        
        4.newScheduledThreadPool(),可根据一个策略去,定时执行线程池里面的任务。
        
    1. package demo8.threadPool;
    2. import java.util.concurrent.*;
    3. public class DemoScheduledThreadPool extends Thread {
    4. @Override
    5. public void run() {
    6. System.out.println("run ...");
    7. }
    8. public static void main(String[] args) {
    9. /*executorService.scheduleWithFixedDelay(执行的对象体,启动的耗时,多少时间执行一次, TimeUnit时间单位);*/
    10. DemoScheduledThreadPool demoScheduledThreadPool = new DemoScheduledThreadPool();
    11. ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
    12. ScheduledFuture<?> scheduledFuture = executorService.scheduleWithFixedDelay(demoScheduledThreadPool,5,3, TimeUnit.SECONDS);
    13. }
    14. }
        底层实现:
        

    底层实现来源于 return new ThreadPoolExecutor

    1. package demo8.threadPool;
    2. import java.util.concurrent.ExecutorService;
    3. import java.util.concurrent.Executors;
    4. import java.util.concurrent.ThreadPoolExecutor;
    5. /**
    6. * Created by liudan on 2017/7/22.
    7. */
    8. public class ThreadPoolDemo {
    9. public static void main(String[] args) {
    10. ExecutorService executorService1 = Executors.newFixedThreadPool(10);
    11. ExecutorService executorService2 = Executors.newSingleThreadExecutor();
    12. ExecutorService executorService3 = Executors.newCachedThreadPool();
    13. ExecutorService executorService4 = Executors.newScheduledThreadPool(1);
    14. //底层实现来源于 return new ThreadPoolExecutor
    15. }
    16. }
    17. submit与execute的区别:
      1.submit可以传入参数为实现Callable接口的实例,则返回Future实例对象。
    18.              2.execute的返回值是void。


















  • 相关阅读:
    Tensorflow结点打包和依赖控制
    理解sklearn.feature.text中的CountVectorizer和TfidfVectorizer
    scipy稀疏矩阵
    最佳阈值划分问题
    hihocoder217周 树形DP
    linux免密码登录
    我说
    Linux查看GPU使用情况
    Java交替打印两个字符串
    2018摩拜算法工程师笔试题
  • 原文地址:https://www.cnblogs.com/xxt19970908/p/7337125.html
Copyright © 2011-2022 走看看