1. package com.cky.bean;
  2.  
  3. /**
  4. * Created by chenkaiyang on 2017/12/6.
  5. */
  6. public class ObjectService {
  7. public void serviceMethodA(){
  8. synchronized (this) {
  9. try {
  10. System.out.println("a begin time="+System.currentTimeMillis());
  11. Thread.sleep(2000);
  12. System.out.println("a end time="+System.currentTimeMillis());
  13. } catch (InterruptedException e) {
  14. e.printStackTrace();
  15. }
  16. }
  17.  
  18. }
  19.  
  20. public void serviceMethodB(){
  21. synchronized (this) {
  22. System.out.println("b begin time="+System.currentTimeMillis());
  23. System.out.println("b end time="+System.currentTimeMillis());
  24. }
  25.  
  26. }
  27. }
  1. package com.cky.thread;
  2.  
  3. import com.cky.bean.ObjectService;
  4.  
  5. /**
  6. * Created by chenkaiyang on 2017/12/5.
  7. */
  8. public class ThreadA extends Thread{
  9. private ObjectService service;
  10. public ThreadA(ObjectService service) {
  11. super();
  12. this.service = service;
  13. }
  14.  
  15. @Override
  16. public void run() {
  17. super.run();
  18. service.serviceMethodA();
  19. }
  20. }
  1. package com.cky.thread;
  2.  
  3. import com.cky.bean.ObjectService;
  4.  
  5. /**
  6. * Created by chenkaiyang on 2017/12/5.
  7. */
  8. public class ThreadB extends Thread{
  9. private ObjectService service;
  10. public ThreadB(ObjectService service) {
  11. super();
  12. this.service = service;
  13. }
  14.  
  15. @Override
  16. public void run() {
  17. super.run();
  18. service.serviceMethodB();
  19. }
  20. }
  1. package com.cky.test;
  2.  
  3. import com.cky.bean.ObjectService;
  4. import com.cky.thread.ThreadA;
  5. import com.cky.thread.ThreadB;
  6.  
  7. /**
  8. * Created by chenkaiyang on 2017/12/6.
  9. */
  10. public class Test2 {
  11. public static void main(String[] args) {
  12. ObjectService objectService = new ObjectService();
  13. ThreadA a = new ThreadA(objectService);
  14. a.setName("a");
  15. ThreadB b = new ThreadB(objectService);
  16. b.setName("b");
  17. a.start();
  18. b.start();
  19.  
  20. }
  21. }
  1. D:\it\jdk1.8\bin\java -Didea.launcher.port=7541 "-Didea.launcher.bin.path=D:\it\idea\IntelliJ IDEA 2016.3.3\bin" -Dfile.encoding=UTF-8 -classpath "D:\it\jdk1.8\jre\lib\charsets.jar;D:\it\jdk1.8\jre\lib\deploy.jar;D:\it\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\it\jdk1.8\jre\lib\ext\cldrdata.jar;D:\it\jdk1.8\jre\lib\ext\dnsns.jar;D:\it\jdk1.8\jre\lib\ext\jaccess.jar;D:\it\jdk1.8\jre\lib\ext\jfxrt.jar;D:\it\jdk1.8\jre\lib\ext\localedata.jar;D:\it\jdk1.8\jre\lib\ext\nashorn.jar;D:\it\jdk1.8\jre\lib\ext\sunec.jar;D:\it\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\it\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\it\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\it\jdk1.8\jre\lib\ext\zipfs.jar;D:\it\jdk1.8\jre\lib\javaws.jar;D:\it\jdk1.8\jre\lib\jce.jar;D:\it\jdk1.8\jre\lib\jfr.jar;D:\it\jdk1.8\jre\lib\jfxswt.jar;D:\it\jdk1.8\jre\lib\jsse.jar;D:\it\jdk1.8\jre\lib\management-agent.jar;D:\it\jdk1.8\jre\lib\plugin.jar;D:\it\jdk1.8\jre\lib\resources.jar;D:\it\jdk1.8\jre\lib\rt.jar;F:\springboot\threaddemo\out\production\threaddemo;D:\it\idea\IntelliJ IDEA 2016.3.3\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.cky.test.Test2
  2. a begin time=1512569404772
  3. a end time=1512569406772
  4. b begin time=1512569406772
  5. b end time=1512569406772

结果分析:当一个线程访问object的一个同步代码块时,其他线程对同一个object的所有其他的同步代码块将被阻塞,这说明同步代码块使用的是对象监视

2.2.5synchronized代码间的同步性的更多相关文章

  1. ctags-vim代码间快速跳转

    ctags-vim代码间快速跳转 1.说明 在Linux环境下使用vim进行驱动程序编写和维护的时候,会经常需要调用Linux内核的函数或宏定义,在驱动程序和kernel代码之间频繁跳转是件很繁琐的事 ...

  2. SVN代码冲突解决方案小集合

    对于刚接触svn的人来说,svn冲突后,不能提交是件让人很郁闷的事情.最让人郁闷的事,是代码间的覆盖.你把我代码盖了,我会很火大的.谁把谁的盖了都不爽. 为什么会出现代码冲突问题呢,因为不同的人,同时 ...

  3. Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)

    在前面的文章中介绍的了如何使用Cordova进行跨平台应用的开发,使用Cordova的话基本上就不需要在写系统原生代码了,只要通过编写html页面和js方法即可. 但在有些特殊情况下,还是是需要htm ...

  4. 2015年第11本:代码整洁之道Clean Code

    前一段时间一直在看英文小说,在读到<Before I fall>这本书时,读了40%多实在看不下去了,受不了美国人啰啰嗦嗦的写作风格,还是读IT专业书吧. 从5月9日开始看<代码整洁 ...

  5. C#代码开发规范

    Wrod下载           C#代码开发规范     文件状态: [√] 草稿 [  ] 正式 [  ] 修改 文件标识: 当前版本: 1.1 作    者: Empty 联系电话: 最后更新: ...

  6. Android WebView中的JavaScript代码使用

    在WebView中使用JavaScript 如果你想要载入的页面中用了JavaScript,你必须为你的WebView使能JavaScript. 一旦使能之后,你也可以自己创建接口在你的应用和Java ...

  7. JSP文件上传代码

    一.首先建立一个上传的界面,取名为a.jsp,代码如下 <%@ page contentType="text/html; charset=utf-8" language=&q ...

  8. 将 Objective-C 代码迁移到 Swift(Swift 2.0更新)-b

    本节内容包括: 为你的Objective-c代码做好迁移准备 (Preparing Your Objective-C Code for Migration) 迁移过程(The Migration Pr ...

  9. vim: 搭建vim看代码的环境

    使用 vim + ctags + cscope + taglist 阅读源码  http://my.oschina.net/u/554995/blog/59927 vim tab变空格 http:// ...

随机推荐

  1. iOS 集成极光推送

    最近极光推送更新到V3版本之后,推送又不成功!配合服务器联调了半天,发现是服务器环境配置有问题. 想着就把极光推送的步骤给记录下来. 一.配置push证书 这个可以到极光文档里写,很详细 二.导入必要 ...

  2. ifconfig 运行command not found

    vi /home/lx/.bash_profile中添加 PATH=$PATH:$HOME/bin:/sbin:/bin export PATH   linux查看服务自启动  chkconfig - ...

  3. HashMap从源码分析数据结构

    1. HashMap在链表中存储的是键值对 2. 数组是一块连续的固定长度的内存空间,再好的哈希函数也不能保证得到的存储地址绝对不发生冲突.那么哈希冲突如何解决呢?哈希冲突的解决方案有多种:开放定址法 ...

  4. datepicker动态初始化

    datepicker 初始化动态表单的input,需要调用jquery的on方法来给未来元素初始化. //对动态添加的时间文本框进行动态初始化 $('table').on("focus&qu ...

  5. Jmeter常用脚本开发之JDBC请求

    简单说明:JDBC请求就是使用Jmeter连接数据库,执行sql语句,并返回对应的响应结果 步骤: 1.引入使用的数据库的驱动jar包,使用不同的数据库,我们需要引入不同的jar包.本文使用的MySQ ...

  6. (转)easyui datagrid 部分参数说明

    easyui datagrid 部分参数 数据表格属性(DataGrid Properties) 属性继承控制面板,以下是数据表格独有的属性. 名称 类型 描述 默认值 columns array 数 ...

  7. PAT 1001 害死人不偿命的(3n+1)猜想 (15)(C++&JAVA&Python)

    1001 害死人不偿命的(3n+1)猜想 (15)(15 分) 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反 ...

  8. django admin管理后台中文添加问题

    django版本号 1.7.8 #create database mydb character set utf8;#django-admin.py startproject mysite#设置sett ...

  9. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

  10. jQuery动画函数回调

    $("#show").click(function () { //function 是显示完成之后的回调函数 $("p").show(2000,function ...