美文网首页
程序中的锁

程序中的锁

作者: 来个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 : 天生是一个可重入锁,比如一个递归操作,第一次进去拿到锁,随后执行完毕,紧接着又调用该函数,又重复拿到锁。

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

    相关文章

      网友评论

          本文标题:程序中的锁

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