第一章 线程基本概念(一)

一、线程基本概念

1. 同步和异步

同步:调用者必须等被调用者返回了结果后,才可以执行接下来的操作。

异步:调用者无需等到被调用者返回结果后才能执行。被调用者可以异步执行。

2. 并发和并行

并发:某一具体时刻只有一个线程运行,而在一个时间范围内,看到的是多线程一起执行的假象。

并行:某一时刻存在大于一个线程的多个线程在执行,真正的同时执行。

3. 临界区

临界区:多个线程共享的公共资源。但是一旦有一个线程占用了临界区资源,则其他线程都需要等待。

4. 阻塞和非阻塞

阻塞:如果一个线程占用了临界区资源,而其他线程也需要这个资源,那么其他线程需要等待。等待会导致线程挂起,这个时候线程会阻塞。

非阻塞:没有一个线程会妨碍其他线程执行。

5. 死锁、饥饿、活锁

死锁:A占用了临界资源1,B占用了临界资源2,此时线程A需要获取资源2才能执行,与此同时线程B需要资源1才能执行。

饥饿:一个线程因为获取不到必要的资源而导致长时间无法执行的状态。

活锁:和死锁很像,线程A释放资源1的同时线程B释放资源2,而线程A抢到资源2的同时,线程B抢到资源1。

6 线程和进程

线程:程序执行的最小单位。

进程:可以容纳多个线程,是正在运行的.exe程序。

7. 线程的状态

就绪:刚创建的线程,等待start()调用。

运行:获得CPU执行权。

阻塞:遇到synchronized代码块,等到其他线程释放锁。

等待:当调用wait()方法后,等待notify()方法。

死亡:线程执行结束。

二、线程的三性

1. 原子性:一个操作正在运行时是不会被另一个线程干扰的。对于32位Java虚拟机来说,由于long类型是64位,读写不是原子性的,因此可能出现不一致的结果。

2. 可见性:一个线程修改了某一个共享变量的数值,其他线程能否感知到这次修改。

3. 有序性:就一个线程或者同一个线程内,代码运行时有序的。但是如果是多个线程,那么线程之间是交替执行的,没有统一的顺序。

下一章 线程基本概念(二):https://mp.csdn.net/console/editor/html/107094199

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章