摩尔线程面试题

摩尔线程面试题


2024年4月20日发(作者:)

摩尔线程面试题

1、提高效率创建好一定数量的线程放在池中,等需要使用的时候就从池中拿一个,

这要比需要的时候创建一个线程对象要快的多。

2、方便管理可以编写线程池管理代码对池中的线程同一进行管理,比如说启动时有

该程序创建100个线程,每当有请求的时候,就分配一个线程去工作,如果刚好并发有

101个请求,那多出的这一个请求可以排队等候,避免因无休止的创建线程导致系统崩溃。

1、newSingleThreadExecutor

创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按

照指定顺序(FIFO,LIFO,优先级)执行。

2、newFixedThreadPool

创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

3、newCachedThreadPool

创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无

可回收,则新建线程。

4、newScheduledThreadPool

创建一个定长线程池,支持定时及周期性任务执行。

线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样

的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。说明:

Executors各个方法的弊端:

1)newFixedThreadPool和newSingleThreadExecutor:

主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至OOM。

2)newCachedThreadPool和newScheduledThreadPool:

主要问题是线程数最大数是_VALUE,可能会创建数量非常多的线程,

甚至OOM。

Positiveexample1:

Positiveexample2:

Positiveexample3:

个人在项目中用到的是第三种,业务需求,每天会有调度服务器会通过http协议请

1、ArrayBlockingQueue

是一个基于数组结构的有界阻塞队列,此队列按FIFO(先进先出)原则对元素进行

排序。

2、LinkedBlockingQueue

一个基于链表结构的阻塞队列,此队列按FIFO(先进先出)排序元素,吞吐量通常

要高于ArrayBlockingQueue。静态工厂方法edThreadPool()使用了

这个队列

3、SynchronousQueue

一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则

插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法

hedThreadPool使用了这个队列。

4、PriorityBlockingQueue

一个具有优先级的无限阻塞队列。

corePoolSize:核心池的大小,这个参数跟后面讲述的线程池的实现原理有非常大的

关系。在创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来

才创建线程去执行任务,除非调用了prestartAllCoreThreads()或者


发布者:admin,转转请注明出处:http://www.yc00.com/news/1713584673a2278097.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信