技术文

你必须知道的几个概念

2016-12-13  本文已影响0人  五人行

study.163.com/course/introduction/1003571003.htm#/courseDetail

一、同步(synchronous)与异步(asynchronous)

同步调用一旦开始,调用者必须等到本次调用返回之后,才能继续后面的调用;

异步调用开始之后,无须等待本次调用结束就可以继续后面的调用;

二、并发与并行

当多线程在只有一个CPU的系统上运行时,是并发操作,实际上是切换CPU来执行;

当多线程在有多个CPU的系统上运行时,有可能就是并行操作,每个线程在不同的CPU上执行;

三、临界区

临界区用来表示公共资源或共享数据,可以被多个线程使用,但同一时间点只能被一个线程使用,其它线程想使用这个资源,就得等待,直到资源被释放。

四、阻塞与非阻塞

一外线程占用了临界区资源,其它线程就得等待,这就是阻塞。

五、死锁、饥饿与活锁

死锁:临界区资源被线程占用,无法释放;

饥饿:某个线程一直拿不到临界区资源,一直等待下去;

活锁:每个线程都是一拿到临界区资源立马就释放了,互相谦让临界区资源,都不占用临界区资源;

六、java的内存模型(JMM)

JMM的关键技术点都是围绕着多线程的原子性、可见性与有序性来展开的。

原子性:操作不能中断;

可见性:一个线程修改了共享变量,其它线程立即知道这个修改;

有序性:我们习惯认为,代码是从上往下执行的,但有时可能不是这样的;

上一篇下一篇

猜你喜欢

热点阅读