多线程相关面试题总结

前言:最近一直在面试,总是会被问到多线程相关的问题,就想着收集一下相关的题目。一来加深自己对相关知识的认识;二来要是以后遗忘了,能够快速回忆起来;三来希望对正在查阅相关知识点的朋友有所帮助。


一、进程与线程的概念

进程:是指内存中运行的应用程序,每个进程都有自己独立的一块内存空间。一个进程可以启动多个线程。

           比如在Windows系统中,一个运行的exe就是一个进程。

          动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的

          并发性:任何进程都可以同其他进程一起并发执行

          独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位

          异步性:每个进程都以相互独、不可预知的速度向前推进 

          结构特征:进程由程序、数据和进程控制块三部分组成。

线程:是指进程的一个执行序列,一个进程可以运行多个线程。

         举例:运行中的网易云音乐就是一个进程,播放音乐就是这个进程中的一个线程,下载音乐则是这个进程中的另一个                      线程。

参考地址:https://www.cnblogs.com/zhujunxiao/p/5104128.html

 知乎上一个比较生动形象的回答


二、创建线程的三种方式

①继承Thread类,重写run()方法

②实现Runnable接口,重写run()方法

③实现Callable接口,实现call()方法

点击查看详细内容


三、线程的生命周期

新建:创建线程对象

就绪:线程对象已经启动,但是还没有获得CPU的执行权

运行:线程对象获得了CPU的执行权

       阻塞:没有CPU的执行权,回到就绪状态

死亡:代码运行完毕,线程消亡

多线程相关面试题总结线程的五种状态

 

 

四、什么是线程安全?什么是线程不安全?

线程安全:就是当多线程进行访问的时候,采用加锁的机制,当一个线程访问这个类的某个数据时,进行保护,其他线程不能进行访问知道该线程读取完毕,其他线程才可以使用。不会出现数据不一致或者数据污染。

线程不安全:就是不提供数据保护,有可能出现多个线程先后更改数据,造成得到的数据是脏数据。