
并发编程
志波同学
做一个有担当的程序猿,为互联网贡献自己的一份力量
展开
-
Java并发编程三:并发(Concurrent)与并行(Parallel)的区别(一)
并发(Concurrent)与并行(Parallel)是一个大家比较容易混淆的概念。大家在解释并发与并行的时候一般这样说:多线程是并发执行的;多核CPU是并行执行的,单核CPU是不可以不行执行的;以上说法也是可以理解的,大家都是基于场景来描述的。为了搞清楚这个问题,我查阅了一些资料,发现这篇译文:并发不是并行,它更好中的图片很好的说明了并发与并行的区别。定义网络上找到的定义如下: 并发(C原创 2016-08-02 15:28:51 · 22901 阅读 · 6 评论 -
算法:MCS锁的原理及实现
一、背景1.1 SMP(Symmetric Multi-Processor)对称多处理器结构,它是相对非对称多处理技术而言的、应用十分广泛的并行技术。在这种架构中,一台计算机由多个CPU组成,并共享内存和其他资源,所有的CPU都可以平等地访问内存、I/O和外部中断。虽然同时使用多个CPU,但是从管理的角度来看,它们的表现就像一台单机一样。操作系统将任务队列对称地分布于多个CPU之上,从而极大地...原创 2018-11-08 11:11:42 · 2936 阅读 · 3 评论 -
算法:CLH锁的原理及实现
一、背景1.1 SMP(Symmetric Multi-Processor)对称多处理器结构,它是相对非对称多处理技术而言的、应用十分广泛的并行技术。在这种架构中,一台计算机由多个CPU组成,并共享内存和其他资源,所有的CPU都可以平等地访问内存、I/O和外部中断。虽然同时使用多个CPU,但是从管理的角度来看,它们的表现就像一台单机一样。操作系统将任务队列对称地分布于多个CPU之上,从而极大地...原创 2018-11-07 19:17:41 · 16785 阅读 · 13 评论 -
Java编程:并发编程的3个特性
在并发编程中我们经常会遇到三个问题:原子性问题、可见性问题、有序性问题,下面为大家剖析一下这三个问题。如有不正之处,欢迎批评指正。1、原子性 原子行:即一个或者多个操作作为一个整体,要么全部执行,要么都不执行,并且操作在执行过程中不会被线程调度机制打断;而且这种操作一旦开始,就一直运行到结束,中间不会有任何上下文切换(context switch)。我们用银行账户转账问题来形象的解释一下原子性(当原创 2016-06-15 17:19:41 · 8922 阅读 · 2 评论 -
Java并发编程五:Fork/Join框架介绍
Fork/Join框架是什么Fork/Join框架是一个比较特殊的线程池框架,专用于需要将一个任务不断分解成多个子任务(分支),并将多个子任务的结果不断进行汇总得到最终结果(聚合)的并行计算框架。 Fork/Join框架示例图(图片来自互联网)类说明 ForkJoinTask:我们要使用ForkJoin框架,必须首先创建一个ForkJoin任务。它提供在任务中执行fork()和join()操作的原创 2016-08-17 17:51:55 · 7359 阅读 · 0 评论 -
Java并发编程一:volatile关键字
在网络上找了好多关于volatile的文章,一直没有找到体现volatile作用的代码示例,本文通过代码给大家介绍一下volatile的作用。如有不正之处,欢迎批评指正。示例一:public class TestWithVolatile { private volatile static boolean bChanged; public static void main(String[原创 2016-06-15 22:45:06 · 4918 阅读 · 0 评论 -
Java并发编程二:Callable Future
概述在jdk1.5之前,线程的创建有两种方式:一种是直接继承Thread,另外一种就是实现Runnable接口。但这2种方式都存在一个问题就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者消息传递的方式来达到效果,这样使用起来就比较麻烦。从Java 1.5开始,就提供了Callable类和Future类,通过它们可以在任务执行完毕之后得到任务执行结果。经过分析和总结原创 2016-07-29 18:26:43 · 5895 阅读 · 0 评论 -
Java并发编程四:并发(Concurrent)与并行(Parallel)区别(二)
这段时间在研究并发(Concurrent)与并行(Parallel)的区别,昨天写了 Java并发编程三:并发(Concurrent)与并行(Parallel)的区别,今天看到一篇我认为解释的非常形象的一篇文章,分享给大家。原文地址:Concurrent and Parallel Programming给五岁的孩子解释并发与并行的区别 What’s the difference between原创 2016-08-03 15:22:26 · 7370 阅读 · 0 评论 -
Java并发编程:Phaser 多阶段任务并行执行的利器(使用范例)
Phaser 类是 JUC 包下的并发控制类,适用于多线程分阶段有序的并行执行任务的场景,类似于CountDownLatch、CyclicBarrier 的功能,但是 Phaser 类更加灵活和方便。本篇文章的目的是通俗易懂的讲解 Phaser 的概念以及如何使用 Phaser,便于大家快速理解 Phaser 。1 概念讲解阶段=0,线程=thread2,时间=2019-03-30 14:1...原创 2019-03-30 15:26:00 · 1247 阅读 · 0 评论