线程池 阳光穿透心脏的1/2处 2022-04-01 05:23 310阅读 0赞 **为什么** 1、提高程序的执行效率; 如果程序中有大量短时间任务的线程,由于创建和销毁线程需要和底层操作系统交互,大量时间都耗费在创建和销毁线程上,因而比较浪费时间,系统效率很低;线程池里的每一个线程任务结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用,因而借助线程池可以提高程序的执行效率。 2、控制线程的数量,防止程序崩溃; 如果不加限制地创建和启动线程很容易造成程序崩溃,比如高并发1000W个线程,JVM就需要有保存1000W个线程的空间,这样极易出现内存溢出;线程池中线程数量是一定的,可以有效避免出现内存溢出。 class CountThread implements Runnable{ @Override public void run() { for (int i = 0; i < 5; i++) { } } } public class Test { public static void main(String[] args) { for(;;) { new Thread(new CountThread()).start(); } } } **怎么做** 在JDK5之前,必须手动才能实现线程池,从JDK5开始新增了一个Executors工厂类,通过该工厂类可以实现线程池,该类有如下常用方法: public static ExecutorService newCachedThreadPool() public static ExecutorService newFixedThreadPool(int nThreads) public static ExecutorService newSingleThreadExecutor() ExecutorService 表示一个线程池,该接口常用方法: Future<?> submit(Runnable task) <T> Future<T> submit(Runnable task, T result) void shutdown() 步骤: a、创建线程池对象; b、创建Runable接口实现类实例; c、交Runable接口实现类实例; d、关闭线程池 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; class CountThread implements Runnable{ @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName()+":"+i); } } } public class Test { public static void main(String[] args) { //创建线程池对象,该线程池中有两个闲置线程 ExecutorService pool = Executors.newFixedThreadPool(2); //创建并提交Runable接口实现类实例 pool.submit(new CountThread()); pool.submit(new CountThread()); //关闭线程池 pool.shutdown(); } }
相关 Java 线程池、Runnable线程池、Callable线程池 线程池: 其实就是一个容纳多个线程的容器,其中的线程可以反复的使用,省去了频繁创建和销毁过程对象的操作,无需反复创建线程面消耗过多资源。 为什么要用线程池: 合理 青旅半醒/ 2023年02月26日 12:30/ 0 赞/ 110 阅读
相关 线程、线程池 创建线程的3种方法: package com.frank.threadPool.createThread; / @author 小石潭记 布满荆棘的人生/ 2022年10月22日 04:27/ 0 赞/ 433 阅读
相关 线程池 1.所谓线程池,就是程序的初始化阶段,就预先创建一批线程,每个线程都做好准备干活; 2.然后有一个任务列表,一开始为空,当有任务来了,就往任务列表里面添加;这个任务列表 痛定思痛。/ 2022年06月13日 13:22/ 0 赞/ 362 阅读
相关 线程池 西施越溪女,明艳光云海 最近用线程池和不用线程池做了个速度的测试,在这里备注下: 结果是速度不相上下; public static void main(Str 妖狐艹你老母/ 2022年05月20日 02:35/ 0 赞/ 322 阅读
相关 线程池 线程池 Java里面线程池的顶级接口是 java.util.concurrent.Executor , 但是严格意义上讲 Executor并不是一个线程池,而只是一个 迈不过友情╰/ 2022年03月06日 14:34/ 0 赞/ 442 阅读
相关 线程池 线程池 > 从字面义上来讲,是指管理一组同构工作线程的资源池。线程池是与工作队列密切相关的,其中在工作队列中(Worker Queue)保存了所有等待执行的任务。工作者( 清疚/ 2021年12月11日 03:35/ 0 赞/ 425 阅读
相关 线程池 可preStart一个或全部core thread 0,小于core则来一个任务建一个线程(firstTask),队列,额外线程,拒绝 一个AtomicInteger的 今天药忘吃喽~/ 2021年11月23日 03:40/ 0 赞/ 449 阅读
相关 线程池 1、先创建线程池 import java.util.concurrent.ArrayBlockingQueue; import java.util.concu 拼搏现实的明天。/ 2021年11月09日 14:28/ 0 赞/ 459 阅读
还没有评论,来说两句吧...