`
包子_feiFEI
  • 浏览: 73362 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类

java中synchronized用法 一个比喻

 
阅读更多

java中synchronized用法

打个比方:一个object就像一个大房子,大门永远打开。房子里有 很多房间(也就是方法)。

这些房间有上锁的(synchronized方法), 和不上锁之分(普通方法)。房门口放着一把钥匙(key),这把钥匙可以打开所有上锁的房间。

另外我把所有想调用该对象方法的线程比喻成想进入这房子某个 房间的人。所有的东西就这么多了,下面我们看看这些东西之间如何作用的。

在此我们先来明确一下我们的前提条件。该对象至少有一个synchronized方法,否则这个key还有啥意义。当然也就不会有我们的这个主题了。

一个人想进入某间上了锁的房间,他来到房子门口,看见钥匙在那儿(说明暂时还没有其他人要使用上锁的 房间)。于是他走上去拿到了钥匙

,并且按照自己 的计划使用那些房间。注意一点,他每次使用完一次上锁的房间后会马上把钥匙还回去。即使他要连续使用两间上锁的房间,

中间他也要把钥匙还回去,再取回来。

因此,普通情况下钥匙的使用原则是:“随用随借,用完即还。”

这时其他人可以不受限制的使用那些不上锁的房间,一个人用一间可以,两个人用一间也可以,没限制。但是如果当某个人想要进入上锁的房

间,他就要跑到大门口去看看了。有钥匙当然拿了就走,没有的话,就只能等了。

要是很多人在等这把钥匙,等钥匙还回来以后,谁会优先得到钥匙?Not guaranteed。象前面例子里那个想连续使用两个上锁房间的家伙,他

中间还钥匙的时候如果还有其他人在等钥匙,那么没有任何保证这家伙能再次拿到。 (JAVA规范在很多地方都明确说明不保证,象

Thread.sleep()休息后多久会返回运行,相同优先权的线程那个首先被执行,当要访问对象的锁被 释放后处于等待池的多个线程哪个会优先得

到,等等。我想最终的决定权是在JVM,之所以不保证,就是因为JVM在做出上述决定的时候,绝不是简简单单根据 一个条件来做出判断,而是

根据很多条。而由于判断条件太多,如果说出来可能会影响JAVA的推广,也可能是因为知识产权保护的原因吧。SUN给了个不保证 就混过去了

。无可厚非。但我相信这些不确定,并非完全不确定。因为计算机这东西本身就是按指令运行的。即使看起来很随机的现象,其实都是有规律

可寻。学过 计算机的都知道,计算机里随机数的学名是伪随机数,是人运用一定的方法写出来的,看上去随机罢了。另外,或许是因为要想弄

的确定太费事,也没多大意义,所 以不确定就不确定了吧。)

分享到:
评论

相关推荐

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    如何使用方法的返回值? 166 7.4.4 使用return结束方法 166 7.5 方法重载(overload):给汽车加速添个限制 168 7.5.1 什么是方法的签名 168 7.5.2 什么是重载?为什么要重载? 168 7.5.3 给汽车加个重载的方法...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    如何使用方法的返回值? 166 7.4.4 使用return结束方法 166 7.5 方法重载(overload):给汽车加速添个限制 168 7.5.1 什么是方法的签名 168 7.5.2 什么是重载?为什么要重载? 168 7.5.3 给汽车加个重载的方法...

    Java基础知识点 - 内容比较全面

    6. **Java中的synchronized使用**:synchronized用于实现线程同步,可以修饰方法或代码块,确保同一时刻只有一个线程执行特定代码,防止数据不一致。 7. **Java中的反射机制**:反射允许程序在运行时检查类、接口、...

    java锁机制详解.pdf

    在这个比喻中,一个对象就像一座房子,其方法是房子里的房间。如果一个方法是`synchronized`的,那么它就像是上了锁的房间,只有获取到“钥匙”(锁)的线程才能进入。钥匙在这里就是对象的监视器锁,每个对象都有一...

    java多线程之赛马程序实验8多线程练习下载进度

    实验中的"赛马程序"可能是一个比喻,用来形象地描述多个线程之间的竞争关系。在赛马比赛中,每匹马代表一个线程,它们同时出发,最先到达终点的线程获胜。在这里,每匹马的“速度”代表线程的执行速度,而“终点”则...

    java笔试题 java面试题 java基础

    4. **继承**:Java允许一个类继承另一个类的属性和方法,这使得代码复用和类的层次结构设计成为可能。 5. **多态**:多态性允许不同的子类对象对同一消息作出不同响应,是Java灵活性的体现,也是"九阴真经"中变化...

    JAVA农民 JAVA农民 JAVA农民 JAVA农民

    "JAVA农民"这个概念可能是为了形象地比喻那些通过Java技术辛勤耕耘,不断学习和实践的开发者。他们专注于Java技术,致力于提升自己的编程技能,解决实际问题。 1. Java基础:Java语言基于C++,但设计时考虑了简洁性...

    Java面试之笑傲江湖

    "Java面试之笑傲江湖"这个主题,借鉴了武侠小说中的绝世武功,将Java技术比作江湖秘籍,寓意深入理解和熟练运用这些技能,可以在面试中展现出高超的技艺,赢得理想的职位。以下是对各个“武功”所代表的Java知识点的...

    PDF--java咖啡馆

    在Java的世界里,"咖啡馆"象征着一个轻松的学习环境,作者通过这个比喻,旨在让读者在愉快的氛围中掌握编程技能。书中涵盖了以下几个核心知识点: 1. **Java语言基础**:包括Java的历史、特点以及如何搭建开发环境...

    Java 多线程同步 锁机制与synchronized深入解析

    一个对象可以看作是一个大房子,房子中有多个房间代表方法。synchronized方法相当于上了锁的房间,只有拿到钥匙(锁)的线程才能进入。钥匙在这里指的是对象的监视器锁,每个对象都有一个。线程要访问synchronized...

    关于线程同步

    synchronized关键字是Java提供的一个内置锁机制,它确保了同一时间只有一个线程能够执行特定的代码块或方法,从而保证了线程安全。 synchronized可以用于修饰实例方法、静态方法以及代码块。当修饰实例方法时,锁住...

    java自学课件

    4. **字符串处理**:Java中的`String`类是常用的数据类型,掌握字符串的创建、操作和比较方法,以及如何使用StringBuilder或StringBuffer进行高效字符串拼接,是日常编程中必不可少的技能。 5. **集合框架**:Java...

    Java程序员面试之葵花宝典

    "葵花宝典"通常被比喻为一种秘籍,暗示这份资料包含了全面且关键的信息,可以帮助求职者顺利通过面试。以下是一些Java面试中可能会遇到的重要知识点,涵盖的基础和进阶主题: 1. **Java基础** - 类与对象:理解...

    二十三种设计模式【PDF版】

    的被使用,被调用,而是深刻的介入到一个领域中去,J2EE 等框架软件设计的目的是将一个领域中不变的东西先定义好,比如 整体结构和一些主要职责(如数据库操作 事务跟踪 安全等),剩余的就是变化的东西,针对这个领域...

    Java多线程实现异步调用的方法

    在Java代码中,`Host` 类代表蛋糕店,`request` 方法是顾客下单,返回的 `Data` 对象则是一个未来的数据(`FutureData`),相当于提货单。 1. **异步调用的实现步骤**: - **创建Future对象**:在 `Host` 类的 `...

    用点菜和吃菜来做模拟(生产者和消费者的多线程关系)

    例如,在Java中,我们可以使用synchronized关键字对添加操作进行保护,或者使用BlockingQueue,它内置了线程安全的入队操作。 接着是消费者。消费者线程从队列中取出数据并处理。同样的,我们也需要同步机制防止...

    java-jogging:Java 的每日提交

    "Java 慢跑"的比喻暗示了这是一个渐进式的学习过程,就像慢跑一样,每天坚持一小段距离,逐渐提高体能和耐力。 在Java的学习过程中,可能会涉及以下关键知识点: 1. **基础语法**:包括变量、数据类型、运算符、...

    多线程学习

    如果将进程比喻为一个班级,那么班级中的每一个学生(即线程)都是构成班级的最小单位,这些学生共享班级的资源,如桌椅、黑板、粉笔等。 ##### 2. 线程的交互 - **互斥**:指多个线程不能同时访问某个资源或执行...

    java-zoo

    "java-zoo"这个名称可能暗示着一个与Java相关的项目或教程,它可能以动物或者动物园为主题,用以寓教于乐的方式讲解Java编程概念。下面我们将深入探讨Java编程的一些核心知识点,并结合"java-zoo"的主题进行阐述。 ...

    4.1p:太阳

    然而,考虑到标签是"Java",我们可以假设这个标题可能是Java编程中的一个部分,可能是某个教程、课程或代码示例的章节编号。"太阳"可能象征着光照、活力或者说是编程领域的"核心"概念,暗示我们要讨论的是Java语言的...

Global site tag (gtag.js) - Google Analytics