一、线程池的工作流程 1、线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也不会马上执行它们。 2.当调用execute()方法添加一个任务时,线程池会做如下判断: 如果正在运行的线程数量小于corePoolSize,那么马上创建线程运行这个任务; 如果正在运行的线程数量大于或等于corePoolSize,那么将这个任务放入队列; 如果这时候队列满了,而且正在运行的线程数量小于maximumPoolSize,那么还是要创建非核心线程立刻运行这个任务; 如果队列满了,而且正在运行的线程数量大于或等于maximumPoolSize,那么线程池会根据拒绝...

一、什么是线程池 简单理解,它就是一个管理线程的池子。 它帮我们管理线程,避免增加创建线程和销毁线程的资源损耗。因为线程其实也是一个对象,创建一个对象,需要经过类加载过程,销毁一个对象,需要走GC垃圾回收流程,都是需要资源开销的。 提高响应速度。如果任务到达了,相对于从线程池拿线程,重新去创建一条线程执行,速度肯定慢很多。 重复利用。线程用完,再放回池子,可以达到重复利用的效果,节省资源。 线程池的参数如下: corePoolSize:线程核心参数选择了CPU数×2 maximumPoolSize:最大线程数选择了和核心线程数相同 keepAliveTime:非核心闲置线程存活时间直接置为0 ...

一、CyclicBarrier和CountDownLatch有什么区别? 两者最核心的区别: CountDownLatch是一次性的,而CyclicBarrier则可以多次设置屏障,实现重复利用; CountDownLatch中的各个子线程不可以等待其他线程,只能完成自己的任务;而CyclicBarrier中的各个线程可以等待其他线程 二、Semaphore(信号量) Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。 听起来似乎很抽象,现在汽车多了,开车出门在外的一个老大难问题就是停车。停车场的车位是有限的,只能允许若干车辆停泊...

CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。 它和CountDownLatch类似,都可以协调多线程的结束动作,在它们结束后都可以执行特定动作,但是为什么要有CyclicBarrier,自然是它有和CountDownLatch不同的地方。 因为CountDownLatch的使用是一次性的,无法重复利用,我们用CyclicBarrier就可以实现,因为它可以重复利用。 CyclicBarrier最最核心的方法,...

  qPDHaeUaDv9Q   2023年11月02日   29   0   0 多线程多线程

CountDownLatch,倒计数器,有两个常见的应用场景: 场景1:协调子线程结束动作:等待所有子线程运行结束 CountDownLatch允许一个或多个线程等待其他线程完成操作。 例如,我们很多人喜欢玩的王者荣耀,开黑的时候,得等所有人都上线之后,才能开打。 CountDownLatch模仿这个场景: 创建大乔、兰陵王、安其拉、哪吒和铠等五个玩家,主线程必须在他们都完成确认后,才可以继续运行。 在这段代码中,newCountDownLatch(5)用户创建初始的latch数量,各玩家通过countDownLatch.countDown()完成状态确认,主线程通过countDownLat...

关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~