1.JUC锁的一些概念
原文链接:http://blog.csdn.net/zteny/article/details/54859228
接下来的几篇文章都转自这里,冒犯之处,多多包涵
原子性:
在看原子性之前,我们先看看什么是原子。
1. 原子,记得在化学中提到原子是这么定义的
原子是元素能保持其化学性质的最小单位。 来自 wikipedia
因此我们认为原子是世界上最小的物质单位,具体有不可分割性。
2. 原子操作:是一个不再分的操作。
如,a=0 是一个子原操作。但a++, 不是原子操作,因为它是可以分解成 int t = a + 1; a =
t;
两个操作。
3. 原子性
由此便可引出原子性了,即是 一个操作属于原子操作的话,那么我们称它具有原子性
原语:
通常把不可断的过程称之为原语
是由若干条指令组成的,用于完成一定功能的一个过程。
primitive or atomic action 是由若干个机器指令构成的完成某种特定功能的一段程序,具有不可分割性。即原语的执行必须是连续的,在执行过程中不允许被中断。——百度百科
可见性:
可见性,是指线程之家的可见性,一个线程修改的状态是对另一个线程是可见的。
内存可见性:内存是线程共享的,线程A操作变量后,直接更新内存,线程B立马可以看到线程A操作的效果;后面讲到 volatile 时,在详细介绍
临界区:
我们把并发进程中与共享变量有关的程序段称为临界区。 —— 来自操作系统
可重入:
可重入,顾名思义,就是可以递归、循环进入
如果当前线程已经获得了某个监听器对象所持有的锁,那么该线程在该方法中调用另外一个同步方法也同样持有该锁。比如:
public synchronized void test() {
xxxxxx;
test2();
} public synchronized void test2() {
yyyyy;
}
在上面代码段中,执行 test 方法需要获得当前对象作为监视器的对象锁,但方法中又调用了 test2 的同步方法
如果锁是具有可重入性的话,那么该线程在调用 test2 时并不需要再次获得当前对象的锁,可以直接进入 test2 方法进行操作
如果锁是不具有可重入性的话,那么该线程在调用 test2 前会等待当前对象锁的释放,实际上该对象锁已被当前线程所持有,不可能再次获得
如果锁是不具有可重入性特点的话,那么线程在调用同步方法、含有锁的方法时就会产生死锁。
公平性:
公平性是出现在锁存在竞争的情况下,假若:在竞争锁的时候大家一起来排队,先到先得,我们认为这种策略是公平的;如果不是严格按照这个次序获取锁的情况,我们就称它是不公平的。即新来的人反倒有更大的机会拿到锁,这就是不公平的。
在实现上,新来的人,先做一次检查,如果当时有锁资源,就会先给新人。否则进入队列跟大家一起排队。
排它锁:
排它锁,也叫独占锁,顾名思义即是 只能有一个线程同时获取这个锁。也叫X锁
共享锁:
共享锁,也叫读锁,允许多个线程持有这个锁。称S锁
自旋锁:是一个不可重入性锁
可重入锁:
可重入锁,也叫做递归锁,指的是同一线程外层函数获得锁后,内层递归函数仍然有该锁资源
1.JUC锁的一些概念的更多相关文章
- Java多线程系列--“JUC锁”03之 公平锁(一)
概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...
- Java多线程系列--“JUC锁”04之 公平锁(二)
概要 前面一章,我们学习了“公平锁”获取锁的详细流程:这里,我们再来看看“公平锁”释放锁的过程.内容包括:参考代码释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系 ...
- Java多线程系列--“JUC锁”06之 Condition条件
概要 前面对JUC包中的锁的原理进行了介绍,本章会JUC中对与锁经常配合使用的Condition进行介绍,内容包括:Condition介绍Condition函数列表Condition示例转载请注明出处 ...
- 【目录】JUC锁框架目录
JUC锁框架的目录整理如下: 1. [JUC]JUC锁框架综述 2. [JUC]JDK1.8源码分析之LockSupport(一) 3. [JUC]JDK1.8源码分析之AbstractQueuedS ...
- Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例
概要 本章介绍JUC包中的CyclicBarrier锁.内容包括:CyclicBarrier简介CyclicBarrier数据结构CyclicBarrier源码分析(基于JDK1.7.0_40)Cyc ...
- Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock
本章对ReentrantLock包进行基本介绍,这一章主要对ReentrantLock进行概括性的介绍,内容包括:ReentrantLock介绍ReentrantLock函数列表ReentrantLo ...
- Java多线程系列--“JUC锁”01之 框架
本章,我们介绍锁的架构:后面的章节将会对它们逐个进行分析介绍.目录如下:01. Java多线程系列--“JUC锁”01之 框架02. Java多线程系列--“JUC锁”02之 互斥锁Reentrant ...
- java多线程系类:JUC锁:01之框架
本章,我们介绍锁的架构:后面的章节将会对它们逐个进行分析介绍.目录如下:01. Java多线程系列--"JUC锁"01之 框架02. Java多线程系列--"JUC锁&q ...
- Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例
概要 前面对"独占锁"和"共享锁"有了个大致的了解:本章,我们对CountDownLatch进行学习.和ReadWriteLock.ReadLock一样,Cou ...
随机推荐
- 获取Excel中的图片
如下图,上传要获取这里面的图片,而又不能直接选择,怎么办呢? 1.首先复制一份Excel文件命名copy.xlsx 2.修改copy.xlsx文件的后缀名变成copy.rar 3.解压copy.rar ...
- java连接数据库失败:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
说一下我的情况: 在测试环境中运行没有任何问题,但是导出war包之后,就将war包上传到线上服务器的webapps目录下,然后启动Tomcat,等待Tomcat将上传的war包解压(此时Tomcat没 ...
- 全面系统Python3入门+进阶-1-4 Python的缺点
结束
- hdu 2018 母牛的故事 动态规划入门题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2018 设 f[i][j] 表示第i天年龄为j的母牛个数,其中j=4代表所有年龄达到4岁的成年母牛,则: ...
- 【Leetcode_easy】965. Univalued Binary Tree
problem 965. Univalued Binary Tree 参考 1. Leetcode_easy_965. Univalued Binary Tree; 完
- 【GStreamer开发】GStreamer基础教程02——GStreamer概念
上一个教程演示了如何自动生成一个pipeline.这次我们打算用一个个element来手动搭建一个pipeline.我们这个教程会演示: 1. 什么是GStreamer的element以及如何建立一个 ...
- commands模块【转】
https://www.cnblogs.com/wjoyxt/p/5087951.html 要获得shell命令的输出只需要`cmd`命令就可以了, 需要得到命令执行的状态则需要判断$?的值, 在Py ...
- R镜像源的切换
如果是默认的R安装一般会很慢 install.packages(pkgs, lib, repos = getOption("repos"), contriburl = contri ...
- pycharm 使用black
pycharm 使用black The Uncompromising Code Formatter By using Black, you agree to cede control over min ...
- SAS学习笔记53 RTF单个字符标记设置
如何设置RTF中某一个字斜体而之后的字不斜体.下图中第一个P值都斜体并且加粗,第二个P值只有P进行了斜体和加粗