Java并发编程(一)基本概念理解

1、并发和并行

并发,指的是,同一个时间段,有几个程序在同一个CPU上运行,但是任意一个时间点只有一个程序运行。

并行,指同一个时间点,有多个程序在多个CPU运行。

​ 由于CPU的切换速度非常快,64ms,而人的反应速度是100ms,因此并发在我们肉眼看来,与并行并无差异。

2、线程

​ 程序执行的最小单位

3、线程执行的两个条件

3.1、状态必须是runnable

3.2、分配到CPU时间片

​ 线程分配到了资源之后,进入runnable状态,必须等到CPU分配时间片给它,它才能在CPU上执行相应的指令

4、临界区(共享数据)

​ 共享数据,可以被多个线程同时竞争访问

5、同步和异步

​ 同步,指的是线程之间按照的执行是顺序的,会等待当前线程体结束之后再调用下一个线程体;异步,则相反,是乱序的,也许当前线程体还未执行完,就执行下一个,也就是说同步的时候,线程在CPU上的执行是有序的,1-5的这个时间片段之间,CPU执行线程A的指令,6-10执行线程B的指令;而异步,CPU的时间片分配是乱序的,可能1-3是B然后4-5又切换到了A。同步一般通过锁来实现。

​ 同步和异步,指的是线程之间的关系,比如线程A和线程B,它们要么是同步的要么是异步的。

6、阻塞和非阻塞

​ 阻塞,指的是由于某个线程占用了临界区,而其他线程(在获取CPU时间片之后发现临界区被占用)无法访问该临界区进行了内存意义上的挂起,进入到阻塞池(锁池或者是等待池),等待再次获取资源被唤醒,此时会释放CPU的使用权,此时CPU不会再分配时间片给池中的线程,直到再次获取资源进入到runnable状态之后。

​ 非阻塞,指的是线程的执行不会受其他线程的影响,所有线程都不断尝试向前执行。

​ 阻塞和非阻塞,是线程的状态,在某个时刻,线程要么处于阻塞要么非阻塞;是否能够获取到线程需要的数据,不能就阻塞,否则就非阻塞。

7、同步异步以及阻塞非阻塞之间的关系

​ 阻塞,是同步机制的结果;非阻塞,是异步机制的结果。

你可能感兴趣的:(Java并发编程(一)基本概念理解)