zoukankan      html  css  js  c++  java
  • 线程池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();
    // }
    // }
    // });
    // }

  • 相关阅读:
    每天一个linux命令(21):chgrp,chown,chmod
    设计模式之单例模式
    每天一个linux命令(20):find命令之exec
    每天一个linux命令(19):find 命令概览
    每天一个linux命令(18):locate 命令
    每天一个linux命令(17):whereis 命令
    【6折抢】戴尔i7新品Latitude高性能商用本
    Spring Cloud Gateway VS Zuul 比较,怎么选择?
    Zookeeper怎么实现分布式锁?
    数据库怎么分库分表,垂直?水平?
  • 原文地址:https://www.cnblogs.com/tian666/p/7845282.html
Copyright © 2011-2022 走看看