#今天面试遇到一个很无聊的面试官
说有一个场景下 50个线程 同时启动,我要怎么去调用并且保证他的健壮性。
答:我没有实际的业务场景,不过我会选择使用阿里巴巴的德鲁伊线程池创建线程池管理线程,提高线程利用率,节约开销带来的损耗。其次贵公司所用的分布式环境下拆分系统,负载均衡增加服务器资源提高核心业务模块承受能力,最后使用ribbitMQ消息队列扩展延伸性。
最无语的是问了我四五次这个问题 每次都是简短的几个字,我是无法理解他想从我嘴里说出什么话来。
最后肯定不欢而散啦。 该问不问,做政府项目做多了真的会自我觉得是人上人吗?
大老们如果遇到50个线程会什么处理?
我会告诉面试官我用线程池技术,因为池子里有青蛙,只会对着看见的天空叫。
50个线程也不一定要线程池,这要看这些线程都是什麽样的线程,资源消耗情况,有没有竞争性等等。你要反问他,直到他哑口无言。同时也表明你很懂。搞得他不敢问。
我们一个桌面程序,都随便70、80个线程,有啥关系,各自独立,就是接收个数据,很简单,连锁都不用。如果通信连接中断了,就定时重连。
当然,JAVA程序可能不同。
1、线程池threadPool初始化时,任务队列taskQueue中的线程为空,线程池是不会马上执行的。
2、当调用 线程池threadPool的execute()方法时,添加一个线程,线程池会做出如下的判断:
a、如果当前正在运行的线程数量小于corePoolSize,就立即创建并执行这个线程;
b、如果当前正在运行的线程数量大于或等于corePoolSize,新添加的线程会放入队列;
c、如果队列满了,正在运行的线程数量小于 maximumPoolSize,就继续创建线程运行这个任务;
d、如果队列满了,正在运行的线程数量大于或等于 maximumPoolSize,线程池threadPool会抛出不能接受新任务的异常。
3、当一个线程完成任务时,它会从队列taskQueue中取出一个任务来进行执行。
4、当一个线程执行完毕时,超过一定的时间keepAliveTime时,线程池threadPool会判断,如果当前池中运行的线程数大于corePoolSize,那么这个线程就被停掉。线程池threadPool的所有任务完成后,它最终会收缩到corePoolSize的大小。
通过使用上述原理的多线程功能实现,且每次都有50个线程并发执行,测试后,发现大大的降低了执行时间,变成了2个多小时,实践证明多线程就是好!!!
很多公司,面试官不懂技术,或者就懂点皮毛,或者是做其他方面的技术,技术水平还你高,这都很正常。
还有,面试官基本上不可能都跟你聊你会的那些,跟你相谈甚欢。
“50个线程怎么调用确保他的健壮?” 说明提问者问的不到位。
与其纠结这问题,不如好好找下一家公司。