原文链接: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锁的一些概念的更多相关文章

  1. Java多线程系列--“JUC锁”03之 公平锁(一)

    概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...

  2. Java多线程系列--“JUC锁”04之 公平锁(二)

    概要 前面一章,我们学习了“公平锁”获取锁的详细流程:这里,我们再来看看“公平锁”释放锁的过程.内容包括:参考代码释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系 ...

  3. Java多线程系列--“JUC锁”06之 Condition条件

    概要 前面对JUC包中的锁的原理进行了介绍,本章会JUC中对与锁经常配合使用的Condition进行介绍,内容包括:Condition介绍Condition函数列表Condition示例转载请注明出处 ...

  4. 【目录】JUC锁框架目录

    JUC锁框架的目录整理如下: 1. [JUC]JUC锁框架综述 2. [JUC]JDK1.8源码分析之LockSupport(一) 3. [JUC]JDK1.8源码分析之AbstractQueuedS ...

  5. Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例

    概要 本章介绍JUC包中的CyclicBarrier锁.内容包括:CyclicBarrier简介CyclicBarrier数据结构CyclicBarrier源码分析(基于JDK1.7.0_40)Cyc ...

  6. Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock

    本章对ReentrantLock包进行基本介绍,这一章主要对ReentrantLock进行概括性的介绍,内容包括:ReentrantLock介绍ReentrantLock函数列表ReentrantLo ...

  7. Java多线程系列--“JUC锁”01之 框架

    本章,我们介绍锁的架构:后面的章节将会对它们逐个进行分析介绍.目录如下:01. Java多线程系列--“JUC锁”01之 框架02. Java多线程系列--“JUC锁”02之 互斥锁Reentrant ...

  8. java多线程系类:JUC锁:01之框架

    本章,我们介绍锁的架构:后面的章节将会对它们逐个进行分析介绍.目录如下:01. Java多线程系列--"JUC锁"01之 框架02. Java多线程系列--"JUC锁&q ...

  9. Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例

    概要 前面对"独占锁"和"共享锁"有了个大致的了解:本章,我们对CountDownLatch进行学习.和ReadWriteLock.ReadLock一样,Cou ...

随机推荐

  1. PhpStorm (强大的PHP开发环境)10.0.2 附注

    最新版PhpStorm 10正式版改进了PHP 7支持,改进代码完成功能. PhpStorm 是最好的PHP开发工具,使用它进行PHP开发将会让你感觉到编程的乐趣. 快乐无极终于从oschina看到了 ...

  2. 修改ecshop的70种技巧

    1.如何修改网站”欢迎惠临本店”答复(dafu):languages\zh_cn\common.php文件中,$_LANG['welcome']=’欢迎惠临本店’:将他修改成你需要的字样. 2.如何修 ...

  3. python:如何传递一个列表参数

  4. Kubernetes环境部署

    简介 Kubernetes 是一个开源系统,用于容器化应用的自动部署.扩缩和管理.它将构成应用的容器按逻辑单位进行分组以便于管理和发现.   配置镜像源 Debian / Ubuntu apt-get ...

  5. Appium移动自动化测试-----(六)3.AppiumDesktop功能描述

    一般功能 这些能力跨越多个驱动因素. 能力 描述 值 automationName 使用哪个自动化引擎 Appium(默认)或Selendroid或者UiAutomator2或者Espresso对于A ...

  6. 洛谷 题解 P1772 【[ZJOI2006]物流运输】

    题目描述 物流公司要把一批货物从码头\(A\)运到码头\(B\).由于货物量比较大,需要\(n\)天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过 ...

  7. TCP/IP学习笔记11--无线通信: 无线通信的种类, 点对点通信协议

    IEEE802委员会主要指定了以下几种分类: PAN: personal aera network;  LAN: local area network; WAN: wide aera network ...

  8. code and dataset resources of computer vision

    From:http://rogerioferis.com/VisualRecognitionAndSearch2014/Resources.html Source Code Non-exhaustiv ...

  9. jupyter notebook选择conda环境

    需要安装: conda install ipykernel 使用:首先激活对应的conda环境 source activate 环境名称 将环境写入notebook的kernel中 python -m ...

  10. TypeScript 命名空间

    随着代码的不断增加,我们需要有组织的组合代码.TypeScript在1.x版本中提供了命名空间的方式进行代码组织,这也是TypeScript官方代码的组织方式.同时,TypeScript还实现了Jav ...