学习内容
- 线程和进程的区别
- 创建多线程的几种方式
- 线程常用的api
- 守护线程和非守护线程
- 线程join方法
- 多线程解决分批信息的处理
线程和进程的区别
什么是进程?
电脑可以打开多个软件,CPU运行应用程序。
应用程序(可执行的软件QQ,浏览器)
一个应用程序中,都会有进程。进程是多个线程的集合。一个开发系统可以有多个线程。在进程中,程序代码是怎么走的?靠的是哪个线程,在进程中,一定有一个线程,这个线程就是主线程。main函数就是一个主线程。
什么是线程呢?
一个执行的顺序,一个执行的流程,执行的路径。
总结:
- 使用多线程,提高程序的效率,使用多线程,每个线程互不影响,因为都在自己独立运行。
- 进程,进程就是正在运行的程序,是线程的集合。
- 线程,就是正在独立运行的一条路径。
- 面试问到什么多线程的时候,就回答多线程就是为了提高程序的效率。
- 注意事项:多线程并不是提高宽带速度的,而是提高程序的执行效率。
- 多线程下载,断点续传
多线程的应用场景
- 多线程下载
- 爬虫
- 前端开发ajax(异步上传)
- 分布式job(需要同时同一时刻执行多个任务的调度),使用多线程提高程序的效率。
创建线程有哪几种方式
- 使用继承Thread的方式
- 使用实现runnable接口方式
- 使用匿名内部类的方式
- callable
- 使用线程池创建线程(实际开发当中我们不可能创建线程的,我们需要用到线程池对我们的线程进行管理的)
线程常用的api
守护线程和非守护线程
什么是守护线程和非守护线程?
守护线程和main函数相关。用户自己创建的线程,如果主线程停止掉了,不会影响到用户线程。
gc线程,守护线程,gc线程主要是回收的主线程的垃圾的。
多线程运行状态
线程的join方法
join方法是干嘛用的?
例如:A线程在运行中,A线程调用B线程join方法,作用:A线程等待B线程执行完毕之后,再执行A线程。简单来说,那个调用了join方法,那个就先等待其他线程执行完再执行。
多线程解决分批信息的处理
思考题:
如果我们现在要给10w名会员每个人发送520短信祝福,怎么实现,1个短信1秒,单线程就要10w秒,用到多线程处理,就好办多了。
多线程实现,五个线程,每个处理2w,就耗时2w秒而已。小项目可以这样实现,大项目就不要考虑了。线程池管理,使用消息中间件实现,保证数据的一致性。
面试常问
- 使用实现runnable接口创建线程,还是使用继承Thread的方式好?
当然是使用接口的方式,单继承多实现,面向接口编程方式开发的。