• 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。


















  • 相关阅读:
    delphi算法
    delphi 弹出选择目录窗口
    delphi 导出xml文件
    play 源码分析
    oracle指令
    delphi 环境问题
    如何启动redis
    关于整理和工作小结
    如何强制关闭服务
    delphi之事件
  • 原文地址:https://www.cnblogs.com/xxt19970908/p/7337125.html
Copyright © 2020-2023  润新知