2.2.5synchronized代码间的同步性
- package com.cky.bean;
- /**
- * Created by chenkaiyang on 2017/12/6.
- */
- public class ObjectService {
- public void serviceMethodA(){
- synchronized (this) {
- try {
- System.out.println("a begin time="+System.currentTimeMillis());
- Thread.sleep(2000);
- System.out.println("a end time="+System.currentTimeMillis());
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- public void serviceMethodB(){
- synchronized (this) {
- System.out.println("b begin time="+System.currentTimeMillis());
- System.out.println("b end time="+System.currentTimeMillis());
- }
- }
- }
- package com.cky.thread;
- import com.cky.bean.ObjectService;
- /**
- * Created by chenkaiyang on 2017/12/5.
- */
- public class ThreadA extends Thread{
- private ObjectService service;
- public ThreadA(ObjectService service) {
- super();
- this.service = service;
- }
- @Override
- public void run() {
- super.run();
- service.serviceMethodA();
- }
- }
- package com.cky.thread;
- import com.cky.bean.ObjectService;
- /**
- * Created by chenkaiyang on 2017/12/5.
- */
- public class ThreadB extends Thread{
- private ObjectService service;
- public ThreadB(ObjectService service) {
- super();
- this.service = service;
- }
- @Override
- public void run() {
- super.run();
- service.serviceMethodB();
- }
- }
- package com.cky.test;
- import com.cky.bean.ObjectService;
- import com.cky.thread.ThreadA;
- import com.cky.thread.ThreadB;
- /**
- * Created by chenkaiyang on 2017/12/6.
- */
- public class Test2 {
- public static void main(String[] args) {
- ObjectService objectService = new ObjectService();
- ThreadA a = new ThreadA(objectService);
- a.setName("a");
- ThreadB b = new ThreadB(objectService);
- b.setName("b");
- a.start();
- b.start();
- }
- }
- 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
- a begin time=1512569404772
- a end time=1512569406772
- b begin time=1512569406772
- b end time=1512569406772
结果分析:当一个线程访问object的一个同步代码块时,其他线程对同一个object的所有其他的同步代码块将被阻塞,这说明同步代码块使用的是对象监视
2.2.5synchronized代码间的同步性的更多相关文章
- ctags-vim代码间快速跳转
ctags-vim代码间快速跳转 1.说明 在Linux环境下使用vim进行驱动程序编写和维护的时候,会经常需要调用Linux内核的函数或宏定义,在驱动程序和kernel代码之间频繁跳转是件很繁琐的事 ...
- SVN代码冲突解决方案小集合
对于刚接触svn的人来说,svn冲突后,不能提交是件让人很郁闷的事情.最让人郁闷的事,是代码间的覆盖.你把我代码盖了,我会很火大的.谁把谁的盖了都不爽. 为什么会出现代码冲突问题呢,因为不同的人,同时 ...
- Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)
在前面的文章中介绍的了如何使用Cordova进行跨平台应用的开发,使用Cordova的话基本上就不需要在写系统原生代码了,只要通过编写html页面和js方法即可. 但在有些特殊情况下,还是是需要htm ...
- 2015年第11本:代码整洁之道Clean Code
前一段时间一直在看英文小说,在读到<Before I fall>这本书时,读了40%多实在看不下去了,受不了美国人啰啰嗦嗦的写作风格,还是读IT专业书吧. 从5月9日开始看<代码整洁 ...
- C#代码开发规范
Wrod下载 C#代码开发规范 文件状态: [√] 草稿 [ ] 正式 [ ] 修改 文件标识: 当前版本: 1.1 作 者: Empty 联系电话: 最后更新: ...
- Android WebView中的JavaScript代码使用
在WebView中使用JavaScript 如果你想要载入的页面中用了JavaScript,你必须为你的WebView使能JavaScript. 一旦使能之后,你也可以自己创建接口在你的应用和Java ...
- JSP文件上传代码
一.首先建立一个上传的界面,取名为a.jsp,代码如下 <%@ page contentType="text/html; charset=utf-8" language=&q ...
- 将 Objective-C 代码迁移到 Swift(Swift 2.0更新)-b
本节内容包括: 为你的Objective-c代码做好迁移准备 (Preparing Your Objective-C Code for Migration) 迁移过程(The Migration Pr ...
- vim: 搭建vim看代码的环境
使用 vim + ctags + cscope + taglist 阅读源码 http://my.oschina.net/u/554995/blog/59927 vim tab变空格 http:// ...
随机推荐
- iOS 集成极光推送
最近极光推送更新到V3版本之后,推送又不成功!配合服务器联调了半天,发现是服务器环境配置有问题. 想着就把极光推送的步骤给记录下来. 一.配置push证书 这个可以到极光文档里写,很详细 二.导入必要 ...
- ifconfig 运行command not found
vi /home/lx/.bash_profile中添加 PATH=$PATH:$HOME/bin:/sbin:/bin export PATH linux查看服务自启动 chkconfig - ...
- HashMap从源码分析数据结构
1. HashMap在链表中存储的是键值对 2. 数组是一块连续的固定长度的内存空间,再好的哈希函数也不能保证得到的存储地址绝对不发生冲突.那么哈希冲突如何解决呢?哈希冲突的解决方案有多种:开放定址法 ...
- datepicker动态初始化
datepicker 初始化动态表单的input,需要调用jquery的on方法来给未来元素初始化. //对动态添加的时间文本框进行动态初始化 $('table').on("focus&qu ...
- Jmeter常用脚本开发之JDBC请求
简单说明:JDBC请求就是使用Jmeter连接数据库,执行sql语句,并返回对应的响应结果 步骤: 1.引入使用的数据库的驱动jar包,使用不同的数据库,我们需要引入不同的jar包.本文使用的MySQ ...
- (转)easyui datagrid 部分参数说明
easyui datagrid 部分参数 数据表格属性(DataGrid Properties) 属性继承控制面板,以下是数据表格独有的属性. 名称 类型 描述 默认值 columns array 数 ...
- PAT 1001 害死人不偿命的(3n+1)猜想 (15)(C++&JAVA&Python)
1001 害死人不偿命的(3n+1)猜想 (15)(15 分) 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反 ...
- django admin管理后台中文添加问题
django版本号 1.7.8 #create database mydb character set utf8;#django-admin.py startproject mysite#设置sett ...
- MySQL学习笔记-事务相关话题
事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...
- jQuery动画函数回调
$("#show").click(function () { //function 是显示完成之后的回调函数 $("p").show(2000,function ...