本文共 758 字,大约阅读时间需要 2 分钟。
前言
Java多线程系列相关的代码示例已经上传到github:
同步和异步
同步:A调用B,B处理完毕后响应给A 异步:A调用B,B先返回给A,然后在后台启动一个新的线程进行处理并行和并发
并行:两个线程同时跑,适合多核CPU,是真正意义上的同时 并发:一个线程分批次跑,适合单核CPU临界区
临界区用来表示一种公共资源或者说共享数据,可以被多个线程使用。但是每一次,同时只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,必须等待阻塞和非阻塞
两个都是并发级别的阻塞和非阻塞通常用来形容多线程间的相互影响。比如一个线程占用了临界资源,那么其他所有需要这个资源的线程就必须在这个临界区中等待,等待会导致线程挂起,这种情况就是阻塞。此时,如果占用的资源的线程一直不愿意释放资源,那么其他所有阻塞在这个临界区上的线程都不能工作
非阻塞允许多个线程同时进入临界区,分为如下几种:
- 一种最弱的非阻塞调度
- 自由出入临界区
- 无竞争时,有限步内完成操作
- 有竞争时,回滚数据
- 是无障碍的
- 保证有一个线程可以胜出
- 无锁的
- 要求所有线程必须在有限步内完成
- 无饥饿的
死锁、饥饿、活锁
转载地址:http://qwpxi.baihongyu.com/