1.synchronized可以使用任意的Object进行加锁,用法比较灵活

===================================================================

另外特别注意一个问题,就是不要使用String常量加锁,会出现死循环

输出结果:

永远都是t1开始,t1结束,没有t2什么事,这是什么原因呢?

String在常量池中只有一个引用,所以尽量不要用字符串常量去加锁

可以采用如下这种方式:

这样就能保证t1,t2都进来了

===================================================================

锁对象改变的问题:

当使用一个对象进行加锁的时候,要注意对象本身发生改变的时候,那么持有的锁就不同.如果对象本身不发生改变,那么依然是同步的,即使是对象属性发生了改变.

如果一修改,锁就发生变化了,那么其他对应的线程就能进来了

----------------------------------------------------------------------------------------------------------------------------

如果对象本身不发生改变,那么依然是同步的,即使是对象属性发生了改变.

这把锁就是modifyLock这个对象

执行结果:

1.6synchronized代码块的更多相关文章

  1. 【swift】BlockOperation和GCD实用代码块

    //BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...

  2. About 静态代码块,普通代码块,同步代码块,构造代码块和构造函数的纳闷

    构造函数用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种.特点:1:该函数的名称和所在类的名称相同.2:不需要定义返回值类型.3:该函数没有具体的返回值.记住:所有对象创 ...

  3. Xcode自定义代码块

    到现在才发现原来Xcode有自定义代码块这么神奇的功能,能简化很多无聊的敲重复代码的工作,真是感叹我怎么才知道!!! 具体的设置流程见:http://nshipster.cn/xcode-snippe ...

  4. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  5. 10、代码块、构造代码块、静态代码块及main方法之间的关系

    1.普通代码块: 在方法或语句中出现在{}之间的类容就称为普通代码块,简称代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”,即顺序执行. /*下面第一个类时合法的 ...

  6. xcode添加快捷代码块

    添加快捷代码块 在开发过程中,一些常用的代码段,我们可以设置成快捷代码段来快速实现代码的编写. 如上图中的属性的设置,它们都有相同重复的代码@property (nonatomic, strong), ...

  7. java-并发-保护代码块

    浏览以下内容前,请点击并阅读 声明 线程经常需要协调其动作,最常用的协调方法就是保护代码块,该代码块以一个条件判断开始,当判断为true时才能开始执行. 假设一个方法guradedJoy必须等到变量j ...

  8. 匿名对象 构造方法 重载 构造代码块 this 关键字

    一.匿名对象 1.匿名对象 :没有名字对象 2.匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值,无法获取属性值. 2.匿名对象永远都不可能事一个对象. 3.匿名对象的好处 : 书写简单. ...

  9. C#_技巧:计算代码块运行的时间

    System.Diagnostics下类Stopwatch,给程序代码块运行计时, 利用start()和stop()方法来标记代码快. 该命名空间下还有一些其他类,可以对程序进行诊断(diagnosi ...

随机推荐

  1. pyenv基本使用

    pyenv使用 1.安装: git clone https://github.com/pyenv/pyenv.git 2.配置pyenv环境变量 echo 'export PYENV_ROOT=&qu ...

  2. quartz2.3.0(六)job任务异常处理方式

    Job1类 package org.quartz.examples.example6; import org.quartz.DisallowConcurrentExecution; import or ...

  3. 最清晰易懂的Mysql CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP区别

    timestamp数据类型 Mysql数据库中,当字段类型为timestamp(时间戳)时,如果默认值取CURRENT_TIMESTAMP,则在insert一条记录时,此时的值自动设置为系统当前时间, ...

  4. postman 测试Api接口注意事项

    1.简单数据传输 2.对象传输 使用的是post方式请求 在Headers设置: 在Body写入对象信息,主要红线的地方:1.raw选中 2.j'son格式 form表单提交数据测试 在header里 ...

  5. 1)NET CORE 重新认识 .net & .net core

    最近想系统性的学习下.net core ,在这之前我想再重新的认识下.net ,以及跟.net core 的区别. 有些我们开发.net经常用到的词汇可能还不是很了解,或者不能清晰的出他们的关系与却别 ...

  6. 1.1 文档PUT内部原理

    文档更新原理:       PUT 一条数据的时候,如果是全量替换,ES并不会覆盖原来的文档,而是新创建一个文档,并将version+1,原文档标记为deleted,不会立刻物理删除.ES会在集群的d ...

  7. mysql 设置局域网内可访问

    今天同事要连我电脑的数据库   我以为只要127.0.0.1 可以访问就是 运行通过ip访问的... 然而并不是..这里记录下方法 1.打开命令行   进入你电脑的 mysql的bin 目录下 mys ...

  8. 记支付宝接口对接,涉及到提取证书SN号的解决方案

    支付宝针对.NET SDK并未封装有提取证书SN序列号的方法,仅针对Java平台才有对应的方法(赤裸裸的歧视啊~~) 要想在提取这个SN序列号有两种方案: 1. 直接用Java SDK包来提取SN 2 ...

  9. Java内存模型JMM简单分析

    参考博文:http://blog.csdn.net/suifeng3051/article/details/52611310 http://www.cnblogs.com/nexiyi/p/java_ ...

  10. Python学习日记(八) 函数

    函数的结构: 函数的返回值: 1.当函数执行时运到return关键字将不再往下执行 def func(): print("hello world!") print("he ...