提示:仅供参考
前言
并发和并行区别如下:
- 并行是指多条指令同时在多个处理器上执行。
- 并发则是同一时刻只有一条指令在处理器上执行,多条指令可以快速轮换执行。
一、专有名词
线程 | 进程 |
---|---|
能够执行程序代码的执行单元 | 处于运行中的一个程序 |
共享进程空间/数据段/代码段/堆空间/拥有独立栈空间 | 拥有多个线程 |
创建和开销性能消耗小 | 开销大 |
二、线程的同步机制
1.Synchronized
性能分析 | 实现原理 |
---|---|
线程数较少情况(资源竞争少的情形),优于Lock锁 | 等待锁队列中的线程,通过资源竞争获得对象锁,进入就绪状态,被jvm调度获得CPU时间片,转而进入运行状态,访问临界区(访问互斥资源的Synchronized) ,此时其他线程无法访问,等待当前线程操作完成释放锁。其它线程继续竞争互斥资源。 |
2.Lock
性能分析 | 实现原理 |
---|---|
资源竞争复杂的情形,Lock可以保持性能,而Synchronized会下降 | 通过代码显示指定起始位置和结束位置,锁定代码 |
总结
锁类型 | 锁机制/性能/用法 |
---|---|
synchronized | 获取和释放锁都在块结构,自动解锁(不受异常影响)/根据竞争资源复杂情况而定/可以作用在方法,特定代码上,寄托给jvm执行 |
Lock | 必须在finally块手动解锁/根据竞争资源复杂情况而定/锁定,必须显示代码指定起始和结束位置 |
- Lock可以非阻塞方式tryLock()获取锁,尝试性获取锁,有则立即返回TRUE,没有返回FALSE。