静海网站建设,东莞艺美网站建设,淮安网站建设,小程序启动失败 错误码什么是线程池
线程池是指在初始化一个多线程应用程序过程中创建一个线程集合#xff0c;然后在需要执行新的任务时重用这些线程而不是新建一个线程。线程池中线程的数量通常完全取决于可用内存数量和应用程序的需求。然而#xff0c;增加可用线程数量是可能的。线程池中的每…什么是线程池
线程池是指在初始化一个多线程应用程序过程中创建一个线程集合然后在需要执行新的任务时重用这些线程而不是新建一个线程。线程池中线程的数量通常完全取决于可用内存数量和应用程序的需求。然而增加可用线程数量是可能的。线程池中的每个线程都有被分配一个任务一旦任务已经完成了线程回到池子中并等待下一次分配任务。
什么业务场景下需要使用线程池
1、数据量大
比如一个学生系统在年终需要做学生整个学习的参与次数等如果有10000个学生的数据需要计算那么这个情况下就需要使用线程池来实现。创建线程要花费昂贵的资源和时间如果任务来了才创建线程那么响应时间会变长而且一个进程能创建的线程数有限。为了避免这些问题在程序启动的时候就创建若干线程来响应处理它们被称为线程池里面的线程叫工作线程。从JDK1.5开始Java API提供了Executor框架让你可以创建不同的线程池。比如单线程池每次处理一个任务数目固定的线程池或者是缓存线程池一个适合很多生存期短的任务的程序的可扩展线程池
2:网购商品秒杀 3:云盘文件上传和下载 4:12306网上购票系统等
常用的线程池
常用的线程池有
1SingleThreadExecutor单线程线程池自己做一个内存队列 - 启动后台线程去消费
2FixedThreadExecutor固定数量线程池比如说线程池里面固定就100个线程超过这个线程数就到队列里面去排队等待
3CachedThreadExecutor自动回收空闲线程根据需要自动新增线程传说中的无界线程池无论有多少任务根据你的需要无限制的创建任意多的线程在最短的时间内来满足你但是高峰过去之后如果有大量的线程处于空闲状态没有活儿可以干等待60s之后空闲的线程就被销毁了 4ScheduledThreadExecutor线程数量无限制支持定时调度执行某个线程提交一个任务对于这个任务不是立马执行的是可以设定一个定时调度的逻辑比如说每隔60s执行一次这个一般不用一般来说就用spring schedule的支持
Java的线程池比较重要的几个API
1Executor代表线程池的接口有个execute()方法扔进去一个Runnable类型对象就可以分配一个线程给你执行
2ExecutorService这是Executor的子接口相当于是一个线程池的接口有销毁线程池等方法 - ExecutorService就代表了一个线程池管理器会负责管理线程池 - 线程的创建和销毁 - 队列排队
3Executors线程池的辅助工具类辅助入口类可以通过Executors来快捷的创建你需要的线程池。创建线程池的入口类包含newSingleThreadExecutor()、newCachedThreadPool()、newScheduleThreadPool()、newFixedThreadPool()这些方法就是可以让你创建不同的线程池出来 4ThreadPoolExecutor这是ExecutorService的实现类这才是正儿八经代表一个线程池的类一般在Executors里创建线程池的时候内部都是直接创建一个ThreadPoolExecutor的实例对象返回的然后同时给设置了各种默认参数。
如果我们要创建一个线程池两种方式要么就是Executors.newXX()方法快捷的创建一个线程池出来线程池的所有参数设置都采取默认的方式要么是自己手动构建一个THreadPoolExecutor的一个对象所有的线程池的参数都可以自己手动来调整和设置