- 降低资源消耗,提高利用率,降低创建和销毁线程的消耗。
- 提高响应速度,线程可直接执行,而不是先创建线程,再执行。
- 提高线程的客观理性,线程是稀缺资源,使用线程池可以统一分配调优监控。
因为每次在创建新线程的时候,都是要获取全局锁的,这个时候其它的任务就得阻塞,影响了整体效率。
5.线程池中阻塞队列的作用? 1.阻塞线程,即在任务队列没有任务时,阻塞核心线程,使线程进入wait状态,释放CPU资源。 2.唤醒线程, 阻塞队列自带阻塞和唤醒的功能,不需要额外处理,无任务执行时 , 线程池利用阻塞队列的 take 方法挂 起,从而维持核心线程的存活、不至于一直占用 cpu 资源。 3.保存任务,一般的队列只能保证作为一个有限长度的缓冲区,如果超出了缓冲长度,就无法保留当前的任务了,阻塞队列通过阻塞可以保留住当前想要继续进入队列的任务。 6.线程池中线程复用原理: 线程池将线程和任务进行解耦,线程是线程,任务是任务,摆脱了之前通过 Thread 创建线程时的一个线程必须对应一个任务的限制。 在写多线程的时候,往往新建一个任务类来继承Thread或者实现Runnable接口,将任务逻辑写在run方法里,通过调用Thread.start()方法来执行run方法,才能做到多线程异步运行;直接调run方法是同步运行的。 而在线程池中,同一个线程可以从阻塞队列中不断获取新任务来执行,其核心原理在于线程池对Thread 进行了封装,并不是每次执行任务都会调用 Thread.start() 来创建新线程,而是让每个线程去执行一个“ 循环任务 ” ,在这个 “ 循环任务 ” 中不停检查是否有任务需要被执行,如果有则直接执行任务中的 run 方法,将 run 方法当成一个普通的方法执行,通过这种方式只使用固定的线程就将所有任务的 run 方法串联起来,可以直接做到多线程异步运行。 详细看视频: 膜拜!华为大牛透彻讲解Java面试100道必考题,不管你工作几年,都得看看!现在免费分享给大家!_哔哩哔哩_bilibili


