• 线程池


    线程池

    简述:每个线程在执行完任务后都要被销毁,但是当有很多的线程时,这些线程又是执行很少的任务,就会出现频繁的创建销毁线程,消耗时间,这可以通过线程池得到解决,线程池里的线程执行完后不必销毁,继续执行其他任务,线程池就是一个容器可以使用集合实现。

    1、使用集合中的LinkedLIst作为容器,LinkedList,当程序第一次启动的时候,可以创建多个线程,保存在集合中,当需要用到线程的时候,就从集合中取出来使用,用完了归还。

    Thread t = linkedlist.removeLast();// 使用前取出来
    linkedlist.addLast();// 用完后归还
    

    使用List或者LinkedList就是线程池的底层实现原理,实际上就是一个存储线程的集合。在JDK1.5之后,内置了线程池,可以直接线程池,可以直接使用

    内置的线程池的使用

    java.util.concurrent.Executors:生产线程池的工厂类
    Executors类中的静态方法:
        static ExecutorService newFixedThreadPool(int nThreads):创建一个可以重用的固定线程数的线程池
        参数:int nThreads(线程池中线程数量)
        返回值:ExecutorService接口,返回的是该接口的实现类对象,可以使用ExecutorService接口接收
    
    java.util.concurrent.ExecutorService:线程池接口:
    用来从线程池中获取线程,调用start方法,执行线程任务
    submit(Runable task):提交一个Runable任务用于执行
    shutdown():销毁线程池(不建议使用)
    
    
    线程池的使用步骤:
    1、使用线程池工厂类Executors提供的静态方法newFixedThreadPool创建一个线程池
    2、创建一个Runable接口的实现类,重写run方法,设置线程任务
    3、创建的线程池调用submit方法,传递线程任务,submit方法的参数是Runable实现类的对象
    4、如果不再使用线程池,就可以调用shutdown方法销毁(不建议执行)
    

    Runable实现类

    package cn.zhuobo.day12.threadPool;
    // 2、创建一个Runable接口的实现类,重写run方法,设置线程任务
    public class RunableImpl implements Runnable {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName() + "正在执行");// currentThread方法是Thread类的静态方法
        }
    }
    

    线程池的使用

    public class Demo01ThreadPool {
        public static void main(String[] args) {
    //        1、使用线程池工厂类Executors提供的静态方法newFixedThreadPool创建一个线程池
            ExecutorService pool = Executors.newFixedThreadPool(3);
           //  3、创建的线程池调用submit方法,传递线程任务,submit方法的参数是Runable实现类的对象
            pool.submit(new RunableImpl());// 
            pool.submit(new RunableImpl());
            pool.submit(new RunableImpl());
            pool.submit(new RunableImpl());
        }
    }
    

    执行结果:线程池1使用3个线程去执行这些任务

    pool-1-thread-1正在执行
    pool-1-thread-3正在执行
    pool-1-thread-2正在执行
    pool-1-thread-1正在执行
    
    
  • 相关阅读:
    WinDbg 查看静态变量
    PLSQL 安装说明
    WinDbg设置托管进程断点
    SQL Server 数据库备份策略,第一周运行失败的原因
    Eclipse开发C/C++ 安装配置图文详解
    C 语言静态链表实现
    C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用
    C Primer Plus 收官二叉搜索树实现
    GDB 调试C程序
    C语言 结构体存储空间分配
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10648550.html
Copyright © 2020-2023  润新知