一、线程和进程的联系和区别是什么?
- 一个进程就是一个执行中的程序,而每一个进程都有自己独立的一块内存空间、一组系统资源,每一个进程的内部数据和状态都是完全独立的。
- 线程就是Java程序执行中的单个顺序的流控制。
- 联系:多线程指一个进程中可以同时运行多个不同的线程,执行不同的任务。
- 区别:系统在产生一个线程,或者在各个线程之间切换的时候,负担要比进程小的多。
二、什么是前台线程,什么是后台线程?
- 主线程就是一个前台线程,而后台线程不管线程是否结束,只要所有的前台线程都退出后,进程就会自动终止。
- 一般后台线程处理时间较短的任务,而前台线程一般用于处理需要长时间等待的任务。
三、创建线程有几种方法?它们之间的区别是什么?
- 创建线程有两种方法,一种是继承Thread类,另一种是使用Runnable接口。
- 继承Tread类是通过覆盖原有run方法去调用现在的。而Runnable接口是通过传参调用原有的run方法再调用现有的run方法。
四、线程的生命周期有哪些状态?哪些方法可以改变这些状态?
- 线程的生命周期有创建、可运行、运行、阻塞、死亡五种状态。
- join方法可使线程暂时停止运行。
五、什么是线程安全?为什么会产生线程安全问题?如何解决线程安全问题?
- 当多线程同时访问共享资源(变量),导致线程的安全问题。
- 由于可见性以及原子性可能会产生线程的安全问题。
- 使用volatile以及synchronized可解决部分安全问题。
六、什么是线程的同步通信?同步通信又是如何实现的?
- 线程的同步通信就是当多个线程同时访问一个共享资源的时候,来保证共享数据操作的同步性。
- 使用关键字synchronized修饰某个对象后,该对象就成为监视器,此时可保证只有一个线程可以进入,只有一把锁,而只有拿到锁,才可进入这段程序。
七、什么是死锁?
- 如果多个线程都处于等待状态,彼此需要对方所占用的监视器所有权,就构成死锁。
- 当一个对象拿到A的锁,去等待B的锁,而于此同时,另一个对象先拿到B的锁,去等待A的锁,此时便会构成死锁现象。