![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发、锁
hy_zzzzz
这个作者很懒,什么都没留下…
展开
-
Java中的ReentrantLock和synchronized两种锁定机制的对比
原文:http://www.ibm.com/developerworks/cn/java/j-jtp10264/index.html多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个 Thread 类,可以用它来构建、启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构转载 2017-07-20 14:46:02 · 230 阅读 · 0 评论 -
JVM汇编&volatile关键字可见性
无关性的基石计算机只认识0和1,所以我们写的程序需要被编译器翻译成0和1才能被计算机执行。10多年的时间过去了,今天的计算机仍然只识别0和1,但由于最近10年内虚拟机及建立在虚拟机之上的大量程序语言如后春笋般出现并蓬勃发展,将我们编写字的程序编译成二进制本地机器码已经不再是唯一的选择,越来越多的程序语言选择了与操作系统和机器指令集无关的,平台中立的格式作为程序编译后的存储格式。“一次编写,到处...转载 2019-07-13 22:13:38 · 212 阅读 · 0 评论 -
并发工具箱 concurrent包的原理分析以及使用
并发工具箱 concurrent包的原理分析以及使用1、java.util.concurrent 包下的类分类图locks部分:显式锁(互斥锁和速写锁)相关; atomic部分:原子变量类相关,是构建非阻塞算法的基础; executor部分:线程池相关; collections部分:并发容器相关; tools部分:同步工具相关,如信号量、闭锁、栅栏等功能;1、1col...转载 2019-05-06 15:12:18 · 265 阅读 · 0 评论 -
非阻塞同步算法与CAS(Compare and Swap)无锁算法
锁(lock)的代价锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。操作系统对多线程的锁进行判断就像两姐妹在为一个玩具在争吵,然后操作系统就是能决定他们谁能拿到玩具的父母,这是很慢的。用户态...转载 2019-04-14 22:15:46 · 103 阅读 · 0 评论 -
深入介绍Java中的锁[原理、锁优化、CAS、AQS]
1、为什么要用锁?锁-是为了解决并发操作引起的脏读、数据不一致的问题。2、锁实现的基本原理2.1、volatileJava编程语言允许线程访问共享变量, 为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁要更加方便。volatile在多处理器开发中保证了共享变量的“ 可见性”。可见性的意思是当一个...转载 2019-04-14 22:14:22 · 97 阅读 · 0 评论 -
Java 中的 Monitor 机制
monitor的概念管程,英文是 Monitor,也常被翻译为“监视器”,monitor 不管是翻译为“管程”还是“监视器”,都是比较晦涩的,通过翻译后的中文,并无法对 monitor 达到一个直观的描述。在《操作系统同步原语》 这篇文章中,介绍了操作系统在面对 进程/线程 间同步的时候,所支持的一些同步原语,其中 semaphore 信号量 和 mutex 互斥量是最重要的同步原语。在使...转载 2019-04-14 21:49:54 · 3522 阅读 · 0 评论 -
java中的单例模式与doublecheck
转自: http://devbean.blog.51cto.com/448512/203501在GoF的23种设计模式中,单例模式是比较简单的一种。然而,有时候越是简单的东西越容易出现问题。下面就单例设计模式详细的探讨一下。 所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在。就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保...转载 2018-11-18 23:32:31 · 117 阅读 · 0 评论 -
【死磕Java并发】—–深入分析volatile的实现原理
通过前面一章我们了解了synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized。如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。Java语言规范对volatile的定义如下:Java编程语言允许线程访问共享变量,为了确保共享变量能被准...转载 2018-11-18 19:46:48 · 108 阅读 · 0 评论 -
ReentrantLock实现原理深入探究
前言这篇文章被归到Java基础分类中,其实真的一点都不基础。网上写ReentrantLock的使用、ReentrantLock和synchronized的区别的文章很多,研究ReentrantLock并且能讲清楚ReentrantLock的原理的文章很少,本文就来研究一下ReentrantLock的实现原理。研究ReentrantLock的实现原理需要比较好的Java基础以及阅读代码的能力,有些朋...转载 2018-04-06 01:39:40 · 136 阅读 · 0 评论 -
jedisLock—redis分布式锁实现
一、使用分布式锁要满足的几个条件:系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现)共享资源(各个系统访问同一个资源,资源的载体可能是传统关系型数据库或者NoSQL)同步访问(即有很多个进程同事访问同一个共享资源。没有同步访问,谁管你资源竞争不竞争)二、应用的场景例子 管理后台的部署架构(多台tomcat转载 2017-07-20 15:25:41 · 309 阅读 · 0 评论 -
MESI-CPU缓存一致性协议
MESI(Modified Exclusive Shared Or Invalid)(也称为伊利诺斯协议,是因为该协议由伊利诺斯州立大学提出)是一种广泛使用的支持写回策略的缓存一致性协议,该协议被应用在Intel奔腾系列的CPU中,详见“support the more efficient write-back cache in addition to thewrite-throughcach...转载 2018-11-18 20:15:17 · 179 阅读 · 0 评论