java多线程基本概念

java多线程

Posted by zhenghao on 2019-04-10

进程与线程

进程:操作系统进行资源分配的基本单位。有独立的地址空间 线程:CPU调调度的基本单位,有自己的堆栈和共享变量

并行与并发

并行:在同一时间点同时执行。举个例子,你吃饭的时候,电话来了,你边吃饭边打电话就行并行操作。 并发:在同一个时间片内执行。举个例子,你吃饭的时候,电话来了,你接完电话在吃饭说明你支持并发。

同步与异步

同步:发出一个请求,需要等待返回,然后才能发出下一个请求。也就是所有操作都需要做完,才能返回给用户。举一个例子:你有事情需要给家里打电话,可是打不通,于是你就一直打一直打,直到对方接通。这样你一天的时间都在打电话中度过了。 异步:发出一个请求,不需要等待返回。不需要等待所有操作完才给反馈。举个例子:你有事情打电话,电话打不通,于是你发了封邮件,然后你就不管了,去干其余的事情去了。过段时间对方收到邮件,已经知道什么事情了。然后你这一天还干了很多事情。

临界区与临近资源

临界资源:一次仅允许一个进程使用的共享资源。 临界区:每个进程中访问临近资源的那段代码称为临界区。

死锁 饥饿 活锁

死锁:两个或多个线程互相持有对方所需要的资源,导致这些线程都处于等待状态,无法执行。

饥饿:如果一个线程因为CPU的全部时间被其他线程抢走,而得不到CPU的运行时间,那种这种状态就是饥饿。

活锁:两个或多个线程拿到资源却又相互释放 ,但是却又不执行,相互谦让,都主动将资源释放给别的线程。

线程安全 以及三大特性

线程安全:如果一段代码在多线程访问的时候能正确的操作共享数据,那么就是线程安全的。

线程安全的三大特性:

原子性:即一个操作或多个操作要么全部执行,要么全部不执行。并且执行的过程中不会被任何因素打断。

可见性:即当多个线程访问一个变量时,一个线程修改了变量的值,那么其余的线程能立刻知道修改的值。

有序性:程序在执行的时候,程序代码执行的顺序和语句的顺序是一致的。