版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。
https://blog.csdn.net/weixin_43453386/article/details/88184422
java——》进程 && 线程
多线程 就是指 一个进程 中同时有 多个执行路径(线程) 正在执行。
进程:指在操作系统中正在运行的一个应用程序。
线程:指进程内独立执行某个任务的一个单元。
一、概念
1、车间 && 进程
假定工厂的电力有限,一次只能供给一个车间使用。
假定CPU的能力有限,一次只能运行一个进程。
一个车间开工的时候,其他车间都必须停工。
CPU运行一个进程的时候,其他进程处于非运行状态。
2、工人 && 线程
一个车间,多个工人
一个进程,多个线程
3、车间的地理空间 && 进程的内存空间
车间的地理空间,多个工人,共享
进程的内存空间,多个线程,共享
4、一个车间最多容纳一人 && 一个进程里的内存最多让1个线程使用
一个车间最多容纳一人,里面有人的时候,其他人就不能进去了
一个进程里的内存最多让1个线程使用,当这个线程在使用的时候,其他线程必须等它结束,才能使用
1)、对策:在门口加一把锁
先到的人锁上门,
后到的人看到上锁,
就在门口排队,
等锁打开再进去。
这就叫"互斥锁",
防止多个线程同时读写某一块内存区域。
5、一个车间容纳n人 && 一个进程里的内存让n个线程使用
一个车间容纳n人,如果人数大于n,多出来的人只能在外面等着
一个进程里的内存让n个线程使用,如果线程数大于n,多出来的线程只能在外面等着
1)、对策:在门口挂n把钥匙
进去的人就取一把钥匙,
出来时再把钥匙挂回原处。
后到的人发现钥匙架空了,
就知道必须在门口排队等着了。
这种做法叫做"信号量"(Semaphore),
用来保证多个线程不会互相冲突。
二、系统设计
(1)以多进程形式,允许多个任务同时运行;
(2)以多线程形式,允许单个任务分成不同的部分运行;
(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。
三、进程
1、进程特点
1)独立性
- 独立拥有资源
- 独立的地址空间
- 没有进程本身的运行,用户进程不可以直接访问其他进程的地址空间
2)动态性
- 进程中有时间的概念
- 进程具有自己的生命周期和各种不同的状态
3)并发性
多个进程可以在单个处理器上并发执行,互不影响。
并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时
并发:实际上从cpu操作层面不是真正的同时。并发往往在场景中有公用的资源,那么针对这个公用的资源往往产生瓶颈,我们会用TPS或者QPS来反应这个系统的处理能力。
四、线程
1、线程特点
- 线程和其它线程共享父进程的共享变量和部分环境,相互协作来完成任务。
- 线程是独立运行的,其不知道进程中是否还有其他线程存在。
- 线程的执行是抢占式的,也就是说,当前执行的线程随时可能被挂起,以便运行另一个线程。
- 一个线程可以创建或撤销另一个线程,一个进程中的多个线程可以并发执行。
2、线程的4种状态
只有【可运行状态】与【阻塞状态】可以来回切换,其余的不可逆转
1)新生状态:调用start()方法前
2)可运行状态:调用start()方法后
系统为该线程分配除cpu外的所需资源,对于只有一个cpu的机器而言,任何时刻只能有一个处于可运行的线程占用处理机,获得cpu资源,此时系统正正运行线程的run()方法…
3)阻塞状态/不可运行状态
一个正在运行的线程因某种原因不能继续运行时,进入阻塞状态,只在得到一个特定的事件后会转回可运行状态。
4)死亡状态
一个线程的run()运行完毕,stop()方法被调用或者在运行过程中出现了未捕获的异常时,线程进入死亡状态。