进程
- 一个在内存中运行的应用程序,每个进程都有自己的内存空间,如windows的xx.exe
线程
- 进程中的一个执行任务,负责当前进程的程序的执行
两者区别
- 进程像火车,线程像车厢,(单纯的车厢不能运行)
- 一个进程可以有多个线程
- 不同进程间很难数据共享
- 同一进程下不同线程很容易数据共享
- 进程要比线程消耗更多的资源
- 进程间不会相互影响,线程会,一个线程的挂掉可能会引起整个进程的崩掉
- 进程间可以扩展到多机,线程最多扩展到多核cpu
- 进程可以在内存地址上上锁,即一个线程使用某些共享元素时,其他线程必须等他结束,才能使用这一内存(类似火车洗手间)
- 进程使用的内存可以限定使用量(餐车)
用户线程与守护线程的区别
- 用户线程:运行在前台,执行具体的任务,如程序的主线程,连接网络的子线程
- 守护线程:运行在后台,为其他前台线程服务,当所有的用户线程都结束的时候,守护线程也随jvm一起结束工作,如gc线程
什么是线程死锁
- 当两个或者两个以上的线程同时争抢一个共享资源而造成一种阻塞的现象,若无外力,他们都将无法推进下去
产生死锁的四个必要条件
- 互斥:一个资源只允许一个线程访问
- 有且等待
- 不可抢夺
- 循环等待
解决避免死锁
- 资源一次性分配
- 资源有序分配
- 可剥夺资源