Java的多线程面试问题

1.用多线程的目的是什么
充分利用CPU资源,并发做多件事
2.如何去创建一个多线程
new Thread()
3.线程是什么
一条代码执行流,完成一组代码的执行
这一组代码,往往称为一个任务
4.单核CPU机器上适不适合用多线程
适合,如果是单线程,线程中需要等待IO时,此时CPU就空闲出来了
5.线程什么时候会让出CPU
阻塞时 ,wait,await,等待IO
Sleep
yield
线程结束
6.线程是不是越多越好
新建线程要时间,一次性用完,用完了要销毁,也要时间
线程在Java中是一个对象,每一个Java线程都需要一个操作系统线程支持。创建销毁需要时间。
建很多线程,需要空间,会造成内存紧张
Java对象占用堆内存,操作系统线程占用系统内存,根据 jvm规范,一个线程默认最大栈大小1M(如果超过1M,会报OOM异常),这个栈空间需要从系统内存中分配。
7.该如何正确使用多线程
用合适数量的线程构成线程池

线程池

工作原理
接受任务,放入仓库
工作线程从仓库取出,执行
没有任务时,线程阻塞,当有任务时唤醒执行
任务用什么
Runnable
Callable
仓库用什么
BlockingQueue 阻塞队列,线程安全的
对列为空时的获取阻塞,队列满时的放入阻塞
在这里插入图片描述
8.如何确定合适数量的线程
如果是计算型的任务:CPU的一到两倍
如果是IO型任务:需要多一些的线程,tomcat中默认最大线程数为200

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此视频98分钟时讲到线程池标准实现

发布了34 篇原创文章 · 获赞 6 · 访问量 4767

猜你喜欢

转载自blog.csdn.net/qq_42712280/article/details/103168726