Java并发编程 - 基本概念
在开始我们的并发编程前,我们必须预热一下,一些基本概念必须了解。
1. 同步(Synchronous) / 异步(Asynchronous)
同步和异步都指一次方法调用。
同步:方法开始后,调用者必须等到该方法调用结束返回后,才能继续后续的操作。
异步:异步方法有点像发送一个消息传递,开始后方法调用会立即返回,调用者可以马上
进行后续的操作。
(异步方法通常会在主线程外的另一个线程中, 不会阻碍主线程)
2. 并发(Concurrency) / 并行(Parallelism)
我们经常会混淆并发(Concurrency)和并行(Parallelism)。
相同点:它们都表示多个任务一起执行。
不同点:并发(Concurrency)偏重于多个任务交替执行,这些任务彼此之间可能是串行的。
(eg: 一会儿运行任务A, 一会儿又运行任务B, 系统不会不停地在多个任务间进行切换)
并行(Parallelism)才是真正意义上的同时执行。
场景:
如果系统只有一个CPU(单核), 如果我们使用多线程,那么是不可能并行的,因为一个CPU一次只能执行一条指令。
真实的并行只能出现在多个CPU(多核)的系统中。
3. 临界区
它指的是一种公共资源,该资源每次只能有一个线程使用它,一旦它被某个线程所占用,其它线程就必须等待。
4. 阻塞(Block) / 非阻塞(Non-Block)
阻塞和非阻塞用来形容多个线程间的相互影响。
场景:
一个线程占用了临界区资源,其它线程挂起等待,这种情况就是阻塞。
非阻塞是指所有的线程都不断向前执行,没有被挂起。
5. 死锁(DeadLock) / 饥饿(Starvation) / 活锁(LiveLock)
它们都属于线程的活跃性问题。
死锁是一种很严重的问题。
比如几辆车互相挡住了各自的通道,大家都不愿意让出自己的通道,导致死循环。
饥饿是指某个线程因为某些原因无法获得所需要的资源,导致一直无法执行。
这种情况可能是该线程的优先级太低,高优先级的线程不断抢占它需要的资源。
或者是某个线程一直占着关键资源不放,导致其它需要这个资源的线程无法执行。
活锁比较有趣,它指的是线程都主动将资源释放给他人使用,大家把这个资源丢来丢去,没人肯接受。
这样就导致没有一个线程可以同时拿到所有的资源而正常执行。
太谦让也不好!!^_^
6. 原子性(Atomicity)
原子性是指一个操作是不可中断的,该操作一旦执行,就不能被中断,即使在多线程的环境中,也不会被其他线程干扰。
Java并发编程 - 基本概念的更多相关文章
- java并发编程基础概念
本次内容主要讲进程和线程.CPU核心数和线程数.CPU时间片轮转机制.上下文切换,并行和并发的基本概念以及并发编程的好处和注意事项,为java并发编程打下扎实基础. 1.什么是进程和线程 1.1 进程 ...
- Java并发编程核心概念一览
作者博客地址 https://muggle.javaboy.org. 并行相关概念 同步和异步 同步和异步通常来形容一次方法的调用.同步方法一旦开始,调用者必须等到方法结束才能执行后续动作:异步方法则 ...
- 【java并发编程实战】-----线程基本概念
学习Java并发已经有一个多月了,感觉有些东西学习一会儿了就会忘记,做了一些笔记但是不系统,对于Java并发这么大的"系统",需要自己好好总结.整理才能征服它.希望同仁们一起来学习 ...
- Java并发编程(一)-- 多线程的基本概念
多线程发展进程 在过去单CPU时代,单任务在一个时间点只能执行单一程序:发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程--虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个 ...
- 原创】Java并发编程系列2:线程概念与基础操作
[原创]Java并发编程系列2:线程概念与基础操作 伟大的理想只有经过忘我的斗争和牺牲才能胜利实现. 本篇为[Dali王的技术博客]Java并发编程系列第二篇,讲讲有关线程的那些事儿.主要内容是如下这 ...
- 【Java并发编程实战】-----“J.U.C”:ReentrantReadWriteLock
ReentrantLock实现了标准的互斥操作,也就是说在某一时刻只有有一个线程持有锁.ReentrantLock采用这种独占的保守锁直接,在一定程度上减低了吞吐量.在这种情况下任何的"读/ ...
- Java并发编程:volatile关键字解析
Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在 ...
- 【Java并发编程实战】-----“J.U.C”:Semaphore
信号量Semaphore是一个控制访问多个共享资源的计数器,它本质上是一个"共享锁". Java并发提供了两种加锁模式:共享锁和独占锁.前面LZ介绍的ReentrantLock就是 ...
- java并发编程系列
1.多线程的概念与使用:java笔记五:多线程的使用 2.多线程产生的问题,解决的方法, 1.引入线程池的原因:Java并发编程:线程池的使用 2.高并发情况下数据库提交:jdbc事务处理, 理解事务 ...
随机推荐
- 对数据集“dsArea”执行查询失败。 (rsErrorExecutingCommand),Query execution failed for dataset 'dsArea'. (rsErrorExecutingCommand),Manually process the TFS data warehouse and analysis services cube
错误提示: 处理报表时出错. (rsProcessingAborted)对数据集“dsArea”执行查询失败. (rsErrorExecutingCommand)Team System 多维数据集或者 ...
- 【CentOS】centos7上查看服务开机启动列表
centos7上查看服务开机启动列表 命令: systemctl list-unit-files; 点击回车,可以向下翻页查询
- git push origin master:master
$git push origin master:master (在local repository中找到名字为master的branch,使用它去更新remote repository下名字为mast ...
- Netty Pipeline、channel、Context之间的数据流向
以下所绘制图形均基于Netty4.0.28版本. 一.connect(outbound类型事件) 当用户调用channel的connect时,会发起一个outbound类型的事件,该事件将在pipe ...
- Lua的文件操作
先简单介绍一下被迫使用Lua的IO的情境: 游戏支持玩家自定义上传头像,在排行榜中会显示玩家列表(包括本服.跨服),原有的做法是先检测CCUserDefault中是否存在指定图片的key以及它的状态. ...
- 使用node-webkit实现打包工具的小结
之前一直使用的hta在开发工具,最近转到node-webkit上了,对比一下二者的优劣势.hta单个文件,体积较小,但有兼容性的问题(兼容ie6.7.8就行了,也还好),node-webkit使用we ...
- Android之Android apk动态加载机制的研究
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/22597587 (来自singwhatiwanna的csdn博客) 背景 问题 ...
- 回顾 Exchange 2007 SCC 安装-供需要的人参考!
最近可能会涉及到一个项目的升级,客户目前是基于SCC+SCR的一种工作模式,因为之前对SCR 了解很少,所以需要搭建一个SCC+SCR 平台来做一个整体的POC,来还原整个安装和升级过程. 首先我们先 ...
- CentOS6 安装并破解Jira 7
CentOS6 安装并破解Jira 7 JIRA软件是为您的软件团队的每个成员构建的,用来规划,跟踪和发布优秀的软件. https://confluence.atlassian.... 最低硬件要求及 ...
- CSS的50个代码片段
1.css全局 html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a ...