博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java并发程序设计(一) 基础概念
阅读量:4662 次
发布时间:2019-06-09

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

Java并发程序设计(一) 基础概念

一、必须知道的几个概念

一)同步(Synchronous)和异步(Asynchronous)

同步:同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。

异步:一旦开始,方法调用就立即返回,调用者就可以继续后续的操作。

二)并发(Concurrency)和并行(Parallelism)

共同点:都可以表示多个任务一起执行。

并发:偏重于多个任务交替执行,多个任务之间还可能是串行的。

并行:同时执行。

 

 

三)临界区

一种用来存储公共资源或者共享数据的区域,可以被多个线程使用。但每一次只能有一个线程使用它。

 

四)阻塞(Blocking)和非阻塞(Non-Blocking)

阻塞和非阻塞通常用来形容多线程间的相互影响。比如一个线程占用了临界区资源,那么其它所有需要

这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这种情况就是阻塞。此时,如
果占用资源的线程一直不愿意释放资源,那么其它所有阻塞在这个临界区上的线程都不能工作。
非阻塞允许多个线程同时进入临界区

 

五)死锁、饥饿和活锁

死锁:

饥饿:指某一个或者多个线程因为某种原因无法获得所需要的资源,导致一直无法执行。

活锁:让路的例子。

 

二、并发的级别

一)阻塞

当一个线程进入临界区后,其他线程必须等待该线程释放资源。

二)非阻塞

1)无障碍

无障碍是一种最弱的非阻塞调度

自由出入临界区
无竞争时,有限步内完成操作
有竞争时,回滚数据

可以通过一致性标记来实现。

2)无锁

是无障碍的

保证有一个线程可以胜出

3)无等待

无锁的

要求所有的线程都必须在有限步内完成
无饥饿的

 

转载于:https://www.cnblogs.com/Shadowplay/p/7451043.html

你可能感兴趣的文章
restrictkeyword
查看>>
Etcd学习(一)安装和.NETclient測试
查看>>
js-xlsx操作excel表格
查看>>
HBase学习
查看>>
硬盘及其分区(0819整理)
查看>>
Font in Google Adsense
查看>>
前端模板 artTemplate之辅助方法template.helper
查看>>
java之反射
查看>>
Charles 连接手机抓包出现Unknown,一直无法抓包的问题解决
查看>>
HDU——1418抱歉(平面欧拉公式)
查看>>
校赛——1096Is The Same?(KMP或字符串的最小、大表示法)
查看>>
如何优雅的代码编写 AutoLayout
查看>>
ndk如何将代码放在jni之外
查看>>
让Extjs EditorGridPanel 编辑时支持方向键
查看>>
php sql防注入
查看>>
Knights of a Polygonal Table CodeForces - 994B (贪心)
查看>>
HBase海量数据存储
查看>>
Spring知识点
查看>>
IP地址,子网掩码,默认网关
查看>>
linux常用命令总结
查看>>