博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java并发编程】一.并发简介
阅读量:4291 次
发布时间:2019-05-27

本文共 1019 字,大约阅读时间需要 3 分钟。

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内存模型主要围绕着原子性,可见性和有序性来建立。

原子性

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

可见性

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

有序性

你可能感兴趣的文章
为什么使用mq?
查看>>
配置使用IM表达式的基本任务
查看>>
自定义JSP标签自动完成对页面按钮做权限拦截处理
查看>>
Java互联网架构-负载均衡原理与实现方案
查看>>
实用SQL函数集合(五)《格式化函数》
查看>>
jvm-运行时内存结构
查看>>
Java开发秒杀大型互联网企业高并发限流特技
查看>>
Eclipse+Maven+Spring+CXF 构建webservice 服务
查看>>
Java Collections.addAll() 与 ArrayList.addAll() 的区别
查看>>
消息中间件 kafka+zookeeper 集群部署、测试与应用(1)
查看>>
Eclipse 自定义本地maven仓库位置
查看>>
centos7-codis安装部署,解决redis分布式的方案
查看>>
java基于redis客户端redisson的RPC远程服务调用
查看>>
JVM内存、堆模型、垃圾回收器总结
查看>>
sql(join中on与where区别) / NVL函数 / oracle存储过程中is和as区别 / JAVA调用数据库存储过程
查看>>
前端开发:一款近年非常受欢迎、简单的WEB弹出层组件(layer)
查看>>
Java中sleep方法和wait方法的区别?
查看>>
Eclipse 下载 开源项目 maven依赖丢失和 Deployment Assembly 丢失
查看>>
MyBatis中对List<Object> 对象List的批处理插入操作
查看>>
mybatis使用foreach批次插入,解决sequence只查询一次的问题(在此,我只看union all 部分)
查看>>