【Java并发编程】一.基础

来源:互联网 发布:淘宝老瑞贸易可信吗 编辑:程序博客网 时间:2024/06/08 16:44

1.并发的用处

图像处理&服务端编程

2.概念

同步和异步

同步:同步调用方法一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。
异步:调用方法后立即返回,方法会在另一个线程中执行。调用者无需等待就可以继续后续工作。
这里写图片描述

临界区

临界区指的是一个访问共用资源的程序片段(方法或代码块),而这些共用资源又无法同时被多个线程访问的特性,当有线程进入临界区段时,其他线程或是进程必须等待。

阻塞(Blocking)

一个线程占用了临界区资源,其他线程就会等待,叫做阻塞。

死锁(Deadlock)

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

饥饿

一个或多个线程一直无法获得所需要的资源,导致一直无法执行。

3.并发级别

阻塞:只有一个线程能够得到临界区的锁。

无饥饿:线程的执行满足于先来后到。

无障碍:不加锁,检测到冲突后进行回滚。

无锁:必然有一个线程能在有限步骤内完成操作并离开临界区。(总能保证有一个线程成功)

无等待:所有线程必须能在有限步骤内完成操作。

4.Amdahl定律和Gustafson定律

Amdahl定律

阿姆达尔曾致力于并行处理系统的研究。对于固定负载情况下描述并行处理效果的加速比s,阿姆达尔经过深入研究给出了如下公式:

S=1/(1-a+a/n)

其中,a为并行计算部分所占比例,n为并行处理结点个数。这样,当1-a=0时,(即没有串行,只有并行)最大加速比s=n;当a=0时(即只有串行,没有并行),最小加速比s=1;当n→∞时,极限加速比s→ 1/(1-a),这也就是加速比的上限。例如,若串行代码占整个代码的25%,则并行处理的总体性能不可能超过4。

Gustafson定律

Gustafson假设随着处理器个数的增加,并行与串行的计算总量也是可以增加的。Gustafson定律认为加速系数几乎跟处理器个数成正比,如果现实情况符合Gustafson定律的假设前提的话,那么软件的性能将可以随着处理个数的增加而增加。

5. Java内存模型(JMM)

JMM内存模型主要围绕着原子性,可见性和有序性来建立。

原子性

指的是一个线程一旦开始操作,不会被其他线程干扰。

可见性

一个线程修改了共享变量的值,其他线程是否可以立即知道。

有序性

原创粉丝点击