Java并发编程
点滴~
进阶中的工程师
展开
-
乐观锁和悲观锁的区别
转载 2020-03-05 15:50:17 · 196 阅读 · 0 评论 -
Java并发之AQS详解
https://www.cnblogs.com/waterystone/p/4920797.htmlhttps://mp.weixin.qq.com/s/eyZyzk8ZzjwzZYN4a4H5YA转载 2018-11-16 22:53:46 · 232 阅读 · 0 评论 -
Java并发知识图谱
原创 2018-08-28 11:40:12 · 1286 阅读 · 1 评论 -
Java并发编程系列之二:线程状态
线程的状态一共有6种,在任意时刻线程的状态只能是其中的一种。正确理解线程的状态有助于我们更容易理解线程。具体的线程状态如下:状态名称说明NEW初始状态,线程被构建,但是还没有调用start方法RUNNING运行状态BLOCKED阻塞状态,表示线程阻塞于锁WAITING等待状态,表示线程线程进入等待状态,进入该状态后需要其他线程做出通知动作TIME_WAITING超时等状态状态,该状态与WAITIN...转载 2018-04-13 23:51:30 · 105 阅读 · 0 评论 -
Java并发编程系列之五:happens-before原则
前言happens-before是JMM的核心,之所以设计happens-before,主要出于以下两个方面的因素考虑的:1)程序员的角度,JMM内存模型需要易于理解、易于编程;2)编译器和处理器的角度,编译器和处理器希望内存模型对其束缚越少越好,这样就可以根据自己的处理规则进行优化。但是这两个方面其实是相互矛盾的,因为JMM易于编程和理解就意味着对编译器和处理器的束缚就越多。happens-be...转载 2018-04-13 23:43:12 · 163 阅读 · 0 评论 -
Java并发编程系列之七:正确终止与恢复线程
前面提到了stop()、suspend()等方法在终止与恢复线程的弊端,那么问题来了,应该如何正确终止与恢复线程呢?这里可以使用两种方法:interrupt()方法和使用boolean变量进行控制。在使用interrupt方法之前,有必要介绍一下中断以及与interrupt相关的方法。中断可以理解为线程的一个标志位属性,表示一个运行中的线程是否被其他线程进行了中断操作。这里提到了其他线程,所以可以...转载 2018-04-15 18:53:05 · 141 阅读 · 0 评论 -
Java并发编程系列之六:stop()、resume()和suspend()
这三个方法已经是jdk是过期的方法,为什么仍然要单独拿出来说呢?主要目的是理解jdk多线程API设计的初衷,理解并且更好使用线程API。那么就来说说这三个方法吧:stop方法用于终止一个线程的执行,resume方法用于恢复线程的执行,suspend方法用于暂停线程的执行。要注意的resume方法需要和suspend方法配对使用,因为被暂停的线程需要执行恢复方法才能继续执行。虽然这三个方法不在推荐使...转载 2018-04-15 13:43:44 · 2121 阅读 · 1 评论 -
Java并发编程系列之一:并发机制的底层原理
前言并发编程的目的是让程序运行更快,但是使用并发并不定会使得程序运行更快,只有当程序的并发数量达到一定的量级的时候才能体现并发编程的优势。所以谈并发编程在高并发量的时候才有意义。虽然目前还没有开发过高并发量的程序,但是学习并发是为了更好理解一些分布式架构。那么当程序的并发量不高,比如是单线程的程序,单线程的执行效率反而比多线程更高。这又是为什么呢?熟悉操作系统的应该知道,CPU是通过给每个线程分配...转载 2018-04-09 15:54:09 · 191 阅读 · 0 评论 -
Java并发编程系列之四:锁与volatile的内存语义
前言在前面的文章中已经提到过volatile关键字的底层实现原理:处理器的LOCK指令会使得其他处理器将缓存刷新到内存中(确切说是主存)以及会把其他处理器的缓存设置为无效。这里的内存语义则说的是在JMM中的实现,那么为什么要理解volatile和锁在JMM中的内存语义呢?主要原因是这部分内容是与程序开发息息相关的,所以在高并发量的系统中,如果对这块知识的了解欠缺的话将无法设计出优雅支持高并发的系统...转载 2018-04-13 23:34:00 · 98 阅读 · 0 评论 -
Java并发编程系列之三:重排序与顺序一致性
前言在我们编写程序并运行的时候,编译器给我们一个错觉:程序编译的顺序与编写的顺序是一致的。但是实际上,为了提高性能,编译器和处理器常常会对指令进行重排序。重排序主要分为两类:编译器优化的重排序、指令级别并行的重排序和内存系统的重排序。所以我们编写好Java源代码之后,会经过以上三个重排序,到最终的指令序列。我们这里提到的Java内存模型又是什么呢?Java内存模型(后面简称JMM)是语言级别的内存...转载 2018-04-13 23:28:36 · 148 阅读 · 0 评论