• 线程池2--创建线程


    一.
    1.java四中线程池的使用

    java通过Excutors提供四种线程池,分别为:
    newCacheThreadPool():创建一个可缓存的线程池,如果线程池大小超过处理需要,可灵活回收空闲线程,若无空闲线程,则新建线程。
    newFixedThreadPool():创建一个定长的线程池,可控制线程最大并发数,超出的线程会在队列中排队。
    newScheduledThreadPool():创建一个定长线程池,支持定时及周期性任务执行。
    newSingleThreadExecutor():创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有的任务按照制定的顺序(FIFO,LIFO,优先级)执行。

    二.
    public static void main(String[] args) {

    // 1.线程池为无限大,当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。
    //
    // ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
    //
    // for (int i = 0; i < 10; i++) {
    //
    // final int index = i;
    //
    // try {
    // Thread.sleep(index * 100);
    // } catch (InterruptedException e) {
    // e.printStackTrace();
    // }
    //
    // cachedThreadPool.execute(new Runnable() {
    //
    // @Override
    // public void run() {
    // System.out.println(index);
    // System.out.println(cachedThreadPool);
    // }
    //
    // });
    // }

    /**
    * 2.指定线程池的大小,如果指定线程池大小为5,而请求总数为100,那么前五个的顺序一般会是乱的,因为第一次进入线程池的有五个值,池中的五个线程拿到哪个执行哪个,之后
    * 哪个线程执行完则继续按队列的顺序去抓取任务,所以前面的一般是乱的,后面基本会按顺序输入---线程池大小为100,任务有100,后面的基本还在后面,前面的还在前面,因为
    * 线程的抓取是按顺序去随机抓取的
    */
    ExecutorService fixedThreadPool = Executors.newFixedThreadPool(100);
    for (int i = 0; i < 100; i++) {
    final int index = i;
    fixedThreadPool.execute(new Runnable() {

    @Override
    public void run() {
    try {
    System.out.println(index);
    Thread.sleep(2000);

    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    });
    }
    }

    // 3.1定时执行 先睡一秒,之后的睡三秒 scheduleAtFixedRate
    // ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
    // scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
    //
    // @Override
    // public void run() {
    //
    // System.out.println("delay 3 seconds");
    //
    // }
    // }, 1, 3, TimeUnit.SECONDS);

    3.2--睡三秒后执行 schedule
    public static void main(String[] args) {

    ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
    scheduledThreadPool.schedule(new Runnable() {
    public void run() {
    System.out.println("delay 3 seconds");
    }
    }, 3, TimeUnit.SECONDS);
    }


    //4.创建单线程
    // ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
    // for (int i = 0; i < 10; i++) {
    // final int index = i;
    // singleThreadExecutor.execute(new Runnable() {
    //
    // @Override
    // public void run() {
    // try {
    // System.out.println(index);
    // Thread.sleep(2000);
    // } catch (InterruptedException e) {
    // // TODO Auto-generated catch block
    // e.printStackTrace();
    // }
    // }
    // });
    // }

  • 相关阅读:
    Redis
    Zookeeper的安装配置及基本开发
    【Unity Shader】新书封面 — Low Polygon风格的渲染
    Hive基本原理及环境搭建
    Hadoop开发环境搭建
    java常用排序算法
    企业人事管理系统项目拾金
    Linux27:分区、格式化与修复
    Linux26:查询磁盘和监控系统资源
    Linux25:文件系统特点与XFS文件系统
  • 原文地址:https://www.cnblogs.com/tian666/p/7845282.html
Copyright © 2020-2023  润新知