摘要:
每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。
多线程
线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.
线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU。
多线程面试题(问题解析在后面):
1、为什么用线程池?
2、线程池参数什么意思?
3、讲一讲线程池中的threadpoolexecutor,每个参数干什么用的?
4、说一下线程池内部使用规则
5、用过AtomicInteger吗?怎么用的?
6、用过threadlocal吗?怎么用的?
8、【上机】Java中通过哪些方式创建多线程类? 分别使用代码说明。并调用之。
9、Thread类有没有实现Runnable接口?
10、当调用一个线程对象的start方法后,线程马上进入运行状态吗?
11、下面的代码,实际上有几个线程在运行:
12、线程的几种状态
13、说说:sleep、yield、join、wait方法的区别。
14、为什么不推荐使用stop和destroy方法来结束线程的运行?
15、写个代码说明,终止线程的典型方式。
16、A线程的优先级是10,B线程的优先级是1,那么当进行调度时一定会调用A吗?
17、synchronize修饰在方法前是什么意思?
18、使用Timer和TimerTask实现定时执行,定时在每天下午17:00执行。
19、wait方法被调用时,所在线程是否会释放所持有的锁资源? sleep方法呢?
20、wait、notify、notifyAll是在Thread类中定义的方法吗?作用分别是什么?
21、notify是唤醒所在对象wait pool中的第一个线程吗?
面试问题解析:
问题:为什么用线程池?
解析:有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长。
而且当线程数量太多时,系统不一定能受得了。
使用线程池主要为了解决一下几个问题:
通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销。
对线程进行一些维护和管理,比如定时开始,周期执行,并发数控制等等。
问题:A线程的优先级是10,B线程的优先级是1,那么当进行调度时一定会调用A吗?
解析:不一定。线程优先级对于不同的线程调度器可能有不同的含义,可能并不是用户直观的推测。
见代码ThreadPriorityTest
问题:synchronize修饰在方法前是什么意思?
解析:一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线程才能进入.
问题:wait方法被调用时,所在线程是否会释放所持有的锁资源? sleep方法呢?
解析:wait:释放CPU,释放锁;
sleep:释放CPU,不释放锁。
(更多解析在文末)
附录:
并发编程学习路线图
包含:
1、线程基础,线程之间的共享和协作
2、线程的并发工具类
3、原子操作CAS
4、显式锁和AQS
5、并发容器
6、线程池
7、并发安全
8、实战项目(2个)
9、JMM和底层实现原理
小结
当留给你准备面试的时间不充足时,要“以始为终”的去思考你最终展示在面试官哪里的状态。先写好简历,然后以这种目标去针对性的复习技术知识点。确保简历上写到的技术点,都有话可聊,都可以聊到关键点上。
面试也是要看状态的,当所有的问题你都可以侃侃而谈,这时你的状态自然是最好的。
祝各位面试顺利!
需要面试题汇总(可私信我免费领取答案)私信【面试资料】即可领取
附加java开发的资料(面试资源与经验总结,Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术视频教程资料,架构思维导图,以及面试资料,了解最新的学习动态;了解最新的阿里、京东招聘资讯)
网友评论