同步锁前传 相关术语索引

前言

接下来,我想把同步锁相关的内容梳理梳理。其实不单单是同步锁,所有的JUC的内容我都想理清楚。因为,时而感觉自己对这块挺了解,时而又感觉模糊。因此我打算自己梳理一下,同时整理成笔记,一方面是方便自己,另一方面是方便别人。

锁的相关术语比较多,有些还比较晦涩。很多的时候,我自己都不能准确表达,平时在讲的时候也没有太注意这些。因此接下来内容中出现有些用语不当,表述有偏差的地方,还希望您能慷慨指出。

术语索

原子性

在看原子性之前,我们先看看什么是原子
1. 原子,记得在化学中提到原子是这么定义的

原子是元素能保持其化学性质的最小单位。 来自 wikipedia

因此我们认为原子是世界上最小的物质单位,具体有不可分割性
2. 原子操作
由此可见原子操作,是一个不再分的操作。
如,a=0 是一个子原操作。但a++, 不是原子操作,因为它是可以分解成 int t = a + 1; a = t; 两个操作。
3. 原子性
由此便可引出原子性了,即是
一个操作属于原子操作的话,那么我们称它具有原子性

原语

通常把不可断的过程称之为原语。

是由若干条指令组成的,用于完成一定功能的一个过程。
primitive or atomic action 是由若干个机器指令构成的完成某种特定功能的一段程序,具有不可分割性。即原语的执行必须是连续的,在执行过程中不允许被中断。——百度百科

可见性

可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。
其实我一直觉得,讲清楚这个东西挺难的,但是理解它又挺容易。先做简单解释,当然这个并不严谨,但可以有个简单的印象,后续在介绍volatile时,我们再具体来聊这个事。

内存是线程共享,线程A操作变量后,直接更新内存之后,线程B立马可以看到线程A操作的效果。–这就是可见性。

临界区

我们把并发进程中与共享变量有关的程序段称为临界区。 —— 来自操作系统

可重入

可重入,顾名思义,即是可以递归、循环进入。现在这个解释放在可重入锁的可重入时,感觉怪怪的。本人语言比较差,感觉自己实在没法用文字说清,直接上代码用例子来看看吧。

public synchronized void barfoo() {
    ...
    bar();
    ...
    foo();
    ...
}

public synchronized void bar() {
}

public synchronized void foo() {
}

P.S. synchronized具有可重入性。

如果synchronized不具有可重入性的话,我们barfoo()就会出现死锁,因为barfoo在调用bar时是没办法拿取到锁的。这就是可重入性

再看一段代码

private Connection connection = null;
public synchronized Connection reconnect(final int timesOfRetry) {
    if(connection == null) try {
        connection = create();
    } catch (Exception e) {
        reconnect(timesOfRetry + 1);
    }
    return connection;
}

也就是说能够让当前线程(锁的持有者)多次的获取锁操作。

公平性

这个维基没有,我自己来吧。公平性是对锁存在情况竞争的情况下,谁先由谁先拿到锁的策略而言的。假若,在竞争锁的时候大家都来一起排队,先到先得,我们认为这种策略是公平的。假若,不是严格依照这个次序获取锁的情况,我们就称它是不公平。即是新来的人反倒有更大的机会拿到锁,这就是不公平的。
在实现上,新来的人,先做一次检查,如果有当时有锁资源,就先会给新人。否则进入队列跟大家一块排队*

排他锁

排他锁,也叫独占锁,顾名思义即是只能有一个线程同时获取这个锁。也叫X锁。

共享锁

共享锁,也叫读锁,允许多个线程持有这个锁。称S锁。

自旋锁

自旋旋,是一个不可重入性锁。

自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时才能进入临界区。——来自ifeve

可重入锁

可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值