美文网首页
程序中的锁

程序中的锁

作者: 来个Android小哥 | 来源:发表于2020-05-25 00:46 被阅读0次

1.什么是锁?

从我们日常生活中看,每个门都配一把锁,也就是说是门一般都有一把锁,如果没有锁,问题就来了,什么样的人都可以进去,也就是产生了不安全的因素。从这里引出了锁........

当一个人进去以后,把门锁住,其他的人进不来,等这个人办完事之后,再把锁打开,接着第二个人进入,这就是锁安全。

如下是线程中进入函数的案例(加锁操作):

2.在我们程序中有几种锁?

1.类锁     2.对象锁   3.显示锁

(1)类锁:以单例模式进行举例:

因为会引发new 两次的现象,就加一个锁(synchroized):

进而演变成如下单例模式------》

在这里说明一下,很多开发者都说    synchronized隐士锁,因为synchronized 的解锁和锁定的操作是内部自己帮我们完成好了,我们看不见,所以叫隐士锁,还有一种说法是悲观锁。因为它认为肯定会发生问题,我就等着,要不别人等着。也是一个内置锁。在这个片段中,Manager.class对象持有了一把锁(类锁)。

(2)对象锁(计数):

进行打印后会发现不会有两万次,也就是一直是少于2000次,原因是有的线程进入会出现重复加一次的问题,也是线程不安全的问题。上述累加函数改成:

因为这个锁是加载不带static的函数上,所以是对象锁,等价于:

this:代表指代这个对象上持有的这把锁:对象锁。

(3).显示锁:顾名思义:加锁操作和解锁操作是由我们进行操作。

将上面例子累加操作改为如下代码

注:这里有一个可重入锁的概念

  synchronized : 天生是一个可重入锁,比如一个递归操作,第一次进去拿到锁,随后执行完毕,紧接着又调用该函数,又重复拿到锁。

可重入锁就是在递归的时候可以重复拿到锁,(我暂时是这样理解的)

相关文章

  • 程序中的锁

    1.什么是锁? 从我们日常生活中看,每个门都配一把锁,也就是说是门一般都有一把锁,如果没有锁,问题就来了,什么样的...

  • Java锁

    为解决程序中多个进程和线程对资源的抢占问题,在 Java 中引入了锁的概念 公平锁/非公平锁、可重入锁/不可重入锁...

  • 表锁和行锁

    MySQL中的锁总体可以分为悲观锁和乐观锁。悲观锁MySQL中有自带的锁。乐观锁需要自己写程序控制来实现乐观锁的功...

  • 锁2

    5、读写锁 相比Java中的锁(Locks in Java)里Lock实现,读写锁更复杂一些。假设你的程序中涉及到...

  • Java高并发编程之-分布式锁

    什么是锁 ? 计算机软件开发里面有许多关于锁的概念。如数据库中的:共享锁,排他锁。或者是应用程序中的:线程锁,进程...

  • 【高并发】2、多线程中的锁

    一、多线程中的锁 在多线程中,锁就是要实现线程对资源的访问控制。从程序的角度来看,锁就是一个对象,这个对象需要完成...

  • NSLock/NSRecursiveLock/NSConditi

    使用NSLock类 在Cocoa程序中NSLock中实现了一个简单的互斥锁。所有锁(包括NSLock)的接口实际上...

  • Redis 面试宝典之 Redis 如何实现分布式锁?

    锁是多线程编程中的一个重要概念,它是保证多线程并发时顺利执行的关键。我们通常所说的“锁”是指程序中的锁,也就是单机...

  • 悲观锁与乐观锁的实现(详情图解)

    一、前言 在了解悲观锁和乐观锁之前,我们先了解一下什么是锁,为什么要用到锁? 技术来源于生活,锁不仅在程序中存在,...

  • Redis运用--锁

    锁不是我们日常运用的锁,三斤重的锁往门上一挂,谁都进不来的那种。 程序中的锁是在执行一个可能存在冲突的操作...

网友评论

      本文标题:程序中的锁

      本文链接:https://www.haomeiwen.com/subject/klchahtx.html