线程同步是指对共享资源,若不是共享资源则不涉及线程同步问题。

synchronized方法可以锁定对象,也可以锁定代码块。

当锁定对象时,修饰在类的方法前面。记住:若两个线程同时访问一个对象的不同方法,且对象有一个synchronized方法和一个非synchronized方法,则是两个线程并不涉及同步问题。只有当访问同一个对象的synchronsized方法(可以是不同的synchronized方法)时才会有同步。

比如对象toy有如下两个方法

package concurrent1;public class toy {private int number;public toy(){number = 100;}synchronized public void paint(){System.out.println("thread:"+Thread.currentThread().getName() + ":paint begin");try{int i = (int) (Math.random()*1000);Thread.sleep(i);}catch(Exception e){}System.out.println("thread:"+Thread.currentThread().getName()+":paint");System.out.println("thread:"+Thread.currentThread().getName() + ":paint end");}synchronized public void write(){System.out.println("thread:"+Thread.currentThread().getName() + ":write begin");try{int i = (int) (Math.random()*1000);Thread.sleep(i);}catch(Exception e){}System.out.println("thread:"+Thread.currentThread().getName()+":write");System.out.println("thread:"+Thread.currentThread().getName() + ":write end");}
}
package concurrent1;public class Test {public static void main(String[] args) {// TODO Auto-generated method stubtoy mytoy = new toy();boy myboy = new boy(mytoy);boy youboy = new boy(mytoy);myboy.setName("myboy");youboy.setName("youboy");myboy.start();youboy.start();}}

结果:

thread:myboy:write begin
thread:myboy:write
thread:myboy:write end
thread:myboy:paint begin
thread:myboy:paint
thread:myboy:paint end
thread:youboy:write begin
thread:youboy:write
thread:youboy:write end
thread:youboy:paint begin
thread:youboy:paint
thread:youboy:paint end

若将paint方法前的synchronized取消掉,输出如下,可以看出write方法是异步执行的,只有paint方法是同步执行的。

thread:myboy:write begin
thread:youboy:write begin
thread:myboy:write
thread:myboy:write end
thread:myboy:paint begin
thread:myboy:paint
thread:myboy:paint end
thread:youboy:write
thread:youboy:write end
thread:youboy:paint begin
thread:youboy:paint
thread:youboy:paint end

转载于:https://blog.51cto.com/gugw9handsome/1784207

synchronsized修饰方法的使用相关推荐

  1. java final修饰符_java final修饰符详解,final修饰方法

    之前给大家讲过java final修饰符final修饰变量方面的知识,那么下面要继续给大家讲到的就是final修饰方法方面的知识,一起来了解一下吧. final修饰的方法不能被重写,假如因为一些原因, ...

  2. 使用final来修饰方法

    Final 来修饰方法 final来修饰类 方法 属性都表示其值不可变,也就是说类不可继承,方法不可重写,属性不可覆盖. 如果使用final来修饰方法,那么表示该方法不能被重写,如果在父类中使用fin ...

  3. java private修饰方法,private修饰的方法

    A 解析 在子类覆盖父类的方法时,如果父类的方法的修饰符是Public,子类一定要用public.如果父类的方法的修饰符是private,子类就不能直接访问或重载这个方法.最新...... 方法的定义 ...

  4. 核糖核酸RNA的药物修饰方法

    核糖核酸RNA的药物修饰方法 mRNA上存在着众多类型的RNA修饰,且分布规律各不相同.从5'末端开始,常见的RNA修饰包括2'-OH端的甲基化核苷酸,如N6, 2'-O-二甲基腺嘌呤(m6Am).N ...

  5. synchronized 修饰方法

    今天看到看到一个有意识的问题.记录一下 public class Test {synchronized void SayHello1() {} } 问synchronized修饰的方法代码块会同步么? ...

  6. Java static修饰方法

    一.static 修饰方法 1.与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法.其实之前我们一直写的 main 方法就是静态方法.调用静态方法可通过类名访问或者对象访问. ...

  7. synchronized修饰方法

    文章目录 前言 一.Synchronized修饰非静态方法 二.Synchronized修饰静态方法 三.类锁和对象锁的访问是不冲突的 四.总结 前言 直接说结论: 1.Synchronized修饰非 ...

  8. date对象加十分钟_一张图讲解对象锁和关键字synchronized修饰方法(代码块)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 每个对象在出生的时候就有一把钥匙(监视器Monitor),那么被synchronized 修饰的方法相当于给方法加了一个锁 ...

  9. java static修饰方法_浅析Java中static修饰符

    1.概述 static关键字的中文意思是静态的,该修饰符可以修饰字段.方法.内部类.使用该关键字修饰的内容,在面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修饰的 ...

最新文章

  1. oracle 学习小结1
  2. 赠票福利 | 2019人工智能计算大会即将开幕,与王恩东、陆永青、王海峰等专家共话AI计算技术与未来...
  3. PythonTip(2)
  4. 数据结构实验之数组三:快速转置
  5. Kubernetes1.5新特性(一):Kubelet API增加认证和授权能力
  6. 使用C#打造通用的数据库连接类
  7. 蓝色圆形门禁卡怎么模拟_手把手教你把门禁卡复制到手机,跟实体门禁卡说拜拜...
  8. 线性表之顺序存储,基本操作
  9. mysql5和8怎么同时安装_WINDOWS服务器同时安装多个版本的MYSQL的方法,MQYSQL5和MQYSQL8的共存。...
  10. 数模美赛准备——Numpy
  11. W ndows7蓝屏0x00000024,Win7电脑蓝屏0x00000024错误的解决方法
  12. zip解压缩jar包,像jar包中add文件
  13. 使用 ffmpeg 从视频文件提取音频
  14. 分布式监控平台CAT原理
  15. Mybatis北冥有鱼面试
  16. 流星加速器木马分析与处置方案
  17. 风控决策引擎——决策流路径规划
  18. Linux 下重新挂载分区方法
  19. Python安装和导入cv库
  20. 马化腾入选全球最伟大50位领袖名单;vivo涉嫌虚假宣传;高通裁员1500人丨价值早报...

热门文章

  1. 克莱姆V(克莱姆相关系数、克莱姆关联系数、独立系数)
  2. 微信(WeChat)电脑端多开
  3. Python 条件判断
  4. MySQL的视图、事务和索引
  5. APIO2019解题报告
  6. Mashmokh and Numbers CodeForces - 415C
  7. 网络攻击与防御技术第三次实验
  8. 2018-04-29
  9. 使用amaze ui的分页样式封装一个通用的JS分页控件
  10. 线性回归——最小二乘法_实例(二)