并发编程
武林是大腿
博客都是本人浏览的一些好的博文或者公众号进行的转载归纳,用于互相交流,共同学习。
文章末尾都备注有转载来源,如有侵权,联系删除。
展开
-
并发编程(15)-----ReentrantLock(重入锁)功能详解和应用演示
一文彻底理解ReentrantLock可重入锁的使用 ReentrantLock(重入锁)功能详解和应用演示原创 2020-04-15 16:20:21 · 165 阅读 · 0 评论 -
并发编程(十四)-----重排序与数据依赖性
为什么需要重排序 现在的CPU一般采用流水线来执行指令。一个指令的执行被分成:取指、译码、访存、执行、写回、等若干个阶段。然后,多条指令可以同时存在于流水线中,同时被执行。 指令流水线并不是串行的,并不会因为一个耗时很长的指令在“执行”阶段呆很长时间,而导致后续的指令都卡在“执行”之前的阶段上。我们编写的程序都要经过优化后(编译器和处理器会对我们的程序进行优化以提高运行效率)才会被运行,优化分为很...原创 2019-11-21 17:51:24 · 450 阅读 · 0 评论 -
并发编程(十二)-----Java内存模型(JMM)
理解Java内存区域与Java内存模型 Java内存区域 Java虚拟机在运行程序时会把其自动管理的内存划分为以上几个区域,每个区域都有的用途以及创建销毁的时机,其中蓝色部分代表的是所有线程共享的数据区域,而绿色部分代表的是每个线程的私有数据区域。 方法区(Method Area): 方法区属于线程共享的内存区域,又称Non-Heap(非堆),主要用于存储已被虚拟机加载的类信息、常量、静态变...原创 2019-11-21 11:50:18 · 101 阅读 · 0 评论 -
并发编程(十一)-----Lock简介与初识AQS
concurrent包的结构层次 在针对并发编程中,Doug Lea大师为我们提供了大量实用,高性能的工具类,针对这些代码进行研究会让我们队并发编程的掌握更加透彻也会大大提升我们队并发编程技术的热爱。这些代码在java.util.concurrent包下。如下图,即为concurrent包的目录结构图。 其中包含了两个子包:atomic以及lock,另外在concurrent下的阻塞队列以及ex...原创 2019-11-21 10:09:33 · 408 阅读 · 0 评论 -
并发编程(十)-----Java内存模型
Java 内存模型试图屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。 文章目录Java内存模型(JMM)的介绍内存模型抽象结构哪些是共享变量JMM抽象结构模型主内存与工作内存内存间交互操作内存模型三大特性1. 原子性2. 可见性3. 有序性总结内存屏障先行发生原则1. 单一线程原则2. 管程锁定规则3. v...原创 2019-11-20 16:45:35 · 261 阅读 · 0 评论 -
并发编程(九)-----并发关键字 final
final的简介 final可以修饰变量,方法和类,用于表示所修饰的内容一旦赋值之后就不会再被改变,比如String类就是一个final类型的类。即使能够知道final具体的使用方法,final在多线程中存在的重排序问题很容易忽略,希望能够一起做下探讨。 final的具体使用场景 final能够修饰变量,方法和类,也就是final使用范围基本涵盖了Java每个地方,下面就分别以锁修饰的位置:变量,...原创 2019-11-20 16:42:19 · 175 阅读 · 0 评论 -
并发编程(八)-----并发关键字 volatile
volatile简介 在上一篇文章中我们深入理解了Java关键字-synchronized,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥妙,我们来共同探讨下。 通过上一篇的文章我们了解到synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁。而volatile就可以说是Java虚拟机提供的最轻量级的同步机制。但它...原创 2019-11-20 16:32:50 · 126 阅读 · 0 评论 -
并发编程(七)-----并发关键字 synchronized
synchronized简介 在学习知识前,我们先来看一个现象: public class SynchronizedDemo implements Runnable { private static int count = 0; public static void main(String[] args) { for (int i = 0; i < 10; ...原创 2019-11-20 16:28:05 · 129 阅读 · 0 评论 -
并发编程(六)-----死锁
一、死锁的定义 多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。 下面我们通过一些实例来说明死锁现象。 先看生活中的一个实例,2个人一起吃饭但是只有一双筷子,2人轮流吃(同时拥有2只筷子才能吃)。某一个时候,一个拿了左筷子,一人拿了右筷子,2...原创 2019-11-20 16:02:07 · 129 阅读 · 0 评论 -
并发编程(五)-----多线程的常用操作方法(sleep,yield,join,interrupt)
1.线程的命名与取得 多线程的运行状态往往是不确定的,所以对于多线程操作必须有一个明确标识出线程对象的信息,这个信息就通过线程名称来描述,在Thread类中提供有如下取得线程名称的方法: (1) 创建线程时设置名称的构造方法 public Thread (Runnable target,String name) (2) 设置线程名称的普通方法 public final synchronized ...原创 2019-11-20 15:52:33 · 168 阅读 · 0 评论 -
并发编程(四)-----Java多线程的四种实现方式
Java多线程实现方式主要有四种: 继承Thread类、 实现Runnable接口、 实现Callable接口通过FutureTask包装器来创建Thread线程、 使用线程池接口ExecutorService结合Callable、Future实现有返回结果的多线程。 其中前两种方式线程执行完后都没有返回值,后两种是带返回值的。 1、继承Thread类创建线程 Thread类本质上是实现了Ru...原创 2019-11-20 15:26:36 · 143 阅读 · 0 评论 -
并发编程(三)-----线程的6种状态及切换
Java中线程的状态分为6种。 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(read...原创 2019-11-20 15:12:37 · 139 阅读 · 0 评论 -
并发编程(二)-----进程与线程的区别
进程与线程的区别 进程是资源分配最小单位,线程是程序执行的最小单位; 进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段,线程没有独立的地址空间,它使用相同的地址空间共享数据; CPU切换一个线程比切换进程花费小; 创建一个线程比进程开销小; 线程占用的资源要⽐进程少很多。 线程之间通信更方便,同一个进程下,线程共享全...原创 2019-11-20 15:03:23 · 120 阅读 · 0 评论 -
并发编程(一)-----为什么要使用并发编程
一. 为什么要使用并发编程? 并发编程的主要目的是为了使程序运行的更快; 但是下一个问题出来了,并发编程一定会使我们的程序运行的更快吗?为什么并发编程会使我们的程序变得更快呢? 二. 理解并发编程 2.1并发编程一定会使我们的程序运行的更快吗? 答案是并不是,并发编程只有在一定的请求量或者计算量的时候才会显示出优势; 2.2 为什么有的时候多线程反而会变慢呢? 我们知道os(操作系统)执行并发操作...原创 2019-11-20 14:54:58 · 729 阅读 · 0 评论 -
并发编程
https://blog.csdn.net/thinkwon/article/category/9393255/2原创 2019-11-11 14:25:18 · 101 阅读 · 0 评论