允许的 创建线程数量 为Integer.MAX_VALUE,可能会创建大量的线程,从而导致OOM. 使用场景 1.es数据批量导入 使用了线程池+CountDownLatch批量把数据库中的数据导入到了ES(任意)中,避免OOM。 举例:游戏匹配到5个人才能开始。 CountDownLatch:闭锁/倒计时锁,用来进行线程同步协作,等待所有线程完成倒计时。 场景描述:数...
1)通过java.util.concurrent.Executors中的方法创建一个线程池,用这个线程池来启动线程。启动所有要启动的线程后,执行线程池的shutdown()方法,即在所有线程执行完毕后关闭线程池。然后通过线程池的isTerminated()方法,判断线程池是否已经关闭。线程池成功关闭,就意味着所有线程已经运行完毕了。 import java.util.concurren...
ScheduledThreadPoolExecutor用于需要多个后台线程执行周期任务,同时需要限制线程数量的场景。 自定义线程池时,如果任务是 CPU 密集型(需要进行大量计算、处理),则应该配置尽量少的线程,比如 CPU 个数 + 1,这样可以避免出现每个线程都需要使用很长时间但是有太多线程争抢资源的情况; 如果任务是 IO密集型(主要时间都在 ...
最后,我们提交批量执行这个任务,由于线程池中只有两个线程,所以会看见每次都是打印出两行。(执行这里是最关键的,因为之前我们的任务都是基于callable的,所以执行之后会返回一个future,future大家都熟悉了,项目中也有使用到,使用的场景就是处理完成之后会返回一个回执内容。) 项目中要看具体的业务场景了,由于报表项目是...