java中synchronized用法(zz)

java中synchronized用法(zz)

打个比方:一个object就像一个大房子,大门永远打开。房子里有 很多房间(也就是方法)。这些房间有上锁的(synchronized方法), 和不上锁之分(普通方法)。房门口放着一把钥匙(key),这把钥匙可以打开所有上锁的房间。另外我把所有想调用该对象方法的线程比喻成想进入这房子某个 房间的人。所有的东西就这么多了,下面我们看看这些东西之间如何作用的。

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

一个人想进入某间上了锁的房间,他来到房子门口,看见钥匙在那儿(说明暂时还没有其他人要使用上锁的 房间)。于是他走上去拿到了钥匙,并且按照自己 的计划使用那些房间。注意一点,他每次使用完一次上锁的房间后会马上把钥匙还回去。即使他要连续使用两间上锁的房间,中间他也要把钥匙还回去,再取回来。

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

这时其他人可以不受限制的使用那些不上锁的房间,一个人用一间可以,两个人用一间也可以,没限制。但是如果当某个人想要进入上锁的房间,他就要跑到大门口去看看了。有钥匙当然拿了就走,没有的话,就只能等了。

要是很多人在等这把钥匙,等钥匙还回来以后,谁会优先得到钥匙?Not guaranteed。象前面例子里那个想连续使用两个上锁房间的家伙,他中间还钥匙的时候如果还有其他人在等钥匙,那么没有任何保证这家伙能再次拿到。 (JAVA规范在很多地方都明确说明不保证,象Thread.sleep()休息后多久会返回运行,相同优先权的线程那个首先被执行,当要访问对象的锁被 释放后处于等待池的多个线程哪个会优先得到,等等。我想最终的决定权是在JVM,之所以不保证,就是因为JVM在做出上述决定的时候,绝不是简简单单根据 一个条件来做出判断,而是根据很多条。而由于判断条件太多,如果说出来可能会影响JAVA的推广,也可能是因为知识产权保护的原因吧。SUN给了个不保证 就混过去了。无可厚非。但我相信这些不确定,并非完全不确定。因为计算机这东西本身就是按指令运行的。即使看起来很随机的现象,其实都是有规律可寻。学过 计算机的都知道,计算机里随机数的学名是伪随机数,是人运用一定的方法写出来的,看上去随机罢了。另外,或许是因为要想弄的确定太费事,也没多大意义,所 以不确定就不确定了吧。)

再来看看同步代码块。和同步方法

相关文档:

*******************************************************************************************************

Filename: ftp.java

Author: leetsing(elove)

Create date: 2004-08-30

Use: connect to FTP server,then upload and download file

Modify date: 2004-09-05 add to upload file

2004-09-13 add to downl ......

Windows下JAVA环境变量的设置祥解

Windows下JAVA用到的环境变量主要有3个,JAVA_HOME、CLASSPATH、PATH。下面逐个分析。

JAVA_HOME 指向的是JDK的安装路径,如x:\JDK_1.4.2,在这路径下你应该能够找到bin、lib等目录。值得一提的是,JDK 的安装路径可以选择任意磁盘目录,不过建议你放的目录层 ......

Sqlserver这东西没少跟他打交道,刚学开发语言时就已经跟他接触了,不要说很精通,但就语法还算是熟悉,但现在开始写C#,发现很C#多了一种SqlServer的参数传入方式,以往我们常常对要传参的Sql语句都是直接通过拼凑Sql语句的方式来实现,但现在C#为什么要专门做一个Sql参数的类来实现呢,经过查找才知道,这样做是有道理的,一� ......

关键字: java抽象类和接口的区别---详细解说

abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 ......

java 如何取01 zz_java中synchronized用法(zz)相关推荐

  1. java double 取余_java中double除法和取余的若干注意

    1 整数除法中,除数为0,抛出一个算术异常ArithmeticException.整数取余运算中,除数为0,抛出一个ArithmeticException异常. 如: class Test { pub ...

  2. java 向上取整方法 Math.ceil() 用法、源码分析

    刷题用到了,正好好好看看源码. 用法 Math.ceil() 返回值.参数均为double类型, 如果参数为int类型,idea不会报错,但是方法同时不会向上取整. 参数为int类型时,Math.ce ...

  3. java除数取余_Java中的相除(/)和取余(%)的实现方法|chu

    取模运算与取余运算两个概念有重叠的部分但又不完全一致.主要的区别在于对负整数进行除法运算时操作不同. 对于整形数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商 c = a / b: 2. ...

  4. 转载java中synchronized用法

    转载自:http://blog.csdn.net/chenguang79/article/details/677720 synchronized的一个简单例子 public class TextThr ...

  5. java list详解_Java 中 list 用法案例详解

    LIST是个容器接口可以理解为动态数组,传统数组必须定义好数组的个数才可以使用,而容器对象无须定义好数组下标总数,用add()方法即可添加新的成员对象,他可以添加的仅仅只能为对象,不能添加基本数据类型 ...

  6. java 向上取整_java 中的异常处理和常用类使用

    一.异常: 1.异常的简单介绍: Throwable类 / Error Exception | | Unchecked Checked Runtime Exception Exception Exce ...

  7. java hash 取模_HashMap 中的取模和扩容公式推导

    为什么 HashMap 容量 capacity 大小是 2 的 n 次幂? 为什么使用 e.hash & (capacity - 1) 位运算作取模公式? 为什么扩容时使用 e.hash &a ...

  8. java数字取反_java中源码反码补码与取反的理解

    数字在计算机里是按照二进制来表示的. 箭头朝哪边就是朝哪边移动 补码,反码,和源码 负数原码转化为补码:符号位不变,数值位按位取反,末尾加一. 负数补码转化为原码:符号位不变,数值位按位取反,末尾加1 ...

  9. java如何取到配置文件中值,从配置文件中获取配置信息的几种方法

    1.利用ResourceBundle类从properties文件中获取配置信息 创建配置文件并写入配置信息 image.png 使用以下代码可以轻松获取配置信息 package com.course. ...

最新文章

  1. 求链表倒数第k个结点
  2. Contains Duplicate II
  3. druid连接池配置数据库密码加密
  4. 【转】解决多文件编译中连接错误 multiple definition of*****
  5. 函数式接口的概念函数式接口的定义
  6. 1-9月全国快递服务企业业务量累计完成561.4亿件 同比增长27.9%
  7. mysql一张表可以用吗_MySQL表操作
  8. JMS-activeMq点对点模式
  9. 腾讯想拿到Big Data资源,8h删抓紧时间!!
  10. centos6.8安装anjuta
  11. 当面试官问到以后的职业规划,这样回答绝对称赞你是高手!(二)
  12. 第三章:Servlet基础
  13. cadence SPB17.4 - allegro DRC - Physical - Maximum Neck Length
  14. 微信小游戏加载图片失败问题
  15. 华为云服务器更换操作系统,云服务器更换操作系统
  16. java让一个方法等待_如何写一个“等待”的方法?
  17. JS Array数组和函数
  18. 学习笔记-基于全局和局部对比自监督学习的高分辨率遥感图像语义分割-day1
  19. 自动驾驶(三十二)---------车辆行人识别
  20. 人工学习之预测2023年考研英语答案分布

热门文章

  1. C++异常 调用abort()
  2. 【ubuntu】开机一直“/dev/sda3:clean, XXX files, XXXX blocks”解决方法
  3. 【已解决】报异常:java.lang.ArithmeticException: / by zero
  4. 杂谈异常处理try-catch-finally
  5. [python] 安装TensorFlow问题 解决Cannot uninstall ‘wrapt‘. It is a distutils installed project
  6. 在github上托管Maven存储库
  7. 如何使用基于范围的for()循环与std :: map?
  8. 如何在'纯'Swift中创建弱协议引用(不带@objc)
  9. 如何检查Django版本
  10. “ this”关键字如何工作?