synchronsized修饰方法的使用
线程同步是指对共享资源,若不是共享资源则不涉及线程同步问题。
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修饰方法的使用相关推荐
- java final修饰符_java final修饰符详解,final修饰方法
之前给大家讲过java final修饰符final修饰变量方面的知识,那么下面要继续给大家讲到的就是final修饰方法方面的知识,一起来了解一下吧. final修饰的方法不能被重写,假如因为一些原因, ...
- 使用final来修饰方法
Final 来修饰方法 final来修饰类 方法 属性都表示其值不可变,也就是说类不可继承,方法不可重写,属性不可覆盖. 如果使用final来修饰方法,那么表示该方法不能被重写,如果在父类中使用fin ...
- java private修饰方法,private修饰的方法
A 解析 在子类覆盖父类的方法时,如果父类的方法的修饰符是Public,子类一定要用public.如果父类的方法的修饰符是private,子类就不能直接访问或重载这个方法.最新...... 方法的定义 ...
- 核糖核酸RNA的药物修饰方法
核糖核酸RNA的药物修饰方法 mRNA上存在着众多类型的RNA修饰,且分布规律各不相同.从5'末端开始,常见的RNA修饰包括2'-OH端的甲基化核苷酸,如N6, 2'-O-二甲基腺嘌呤(m6Am).N ...
- synchronized 修饰方法
今天看到看到一个有意识的问题.记录一下 public class Test {synchronized void SayHello1() {} } 问synchronized修饰的方法代码块会同步么? ...
- Java static修饰方法
一.static 修饰方法 1.与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法.其实之前我们一直写的 main 方法就是静态方法.调用静态方法可通过类名访问或者对象访问. ...
- synchronized修饰方法
文章目录 前言 一.Synchronized修饰非静态方法 二.Synchronized修饰静态方法 三.类锁和对象锁的访问是不冲突的 四.总结 前言 直接说结论: 1.Synchronized修饰非 ...
- date对象加十分钟_一张图讲解对象锁和关键字synchronized修饰方法(代码块)
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 每个对象在出生的时候就有一把钥匙(监视器Monitor),那么被synchronized 修饰的方法相当于给方法加了一个锁 ...
- java static修饰方法_浅析Java中static修饰符
1.概述 static关键字的中文意思是静态的,该修饰符可以修饰字段.方法.内部类.使用该关键字修饰的内容,在面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修饰的 ...
最新文章
- oracle 学习小结1
- 赠票福利 | 2019人工智能计算大会即将开幕,与王恩东、陆永青、王海峰等专家共话AI计算技术与未来...
- PythonTip(2)
- 数据结构实验之数组三:快速转置
- Kubernetes1.5新特性(一):Kubelet API增加认证和授权能力
- 使用C#打造通用的数据库连接类
- 蓝色圆形门禁卡怎么模拟_手把手教你把门禁卡复制到手机,跟实体门禁卡说拜拜...
- 线性表之顺序存储,基本操作
- mysql5和8怎么同时安装_WINDOWS服务器同时安装多个版本的MYSQL的方法,MQYSQL5和MQYSQL8的共存。...
- 数模美赛准备——Numpy
- W ndows7蓝屏0x00000024,Win7电脑蓝屏0x00000024错误的解决方法
- zip解压缩jar包,像jar包中add文件
- 使用 ffmpeg 从视频文件提取音频
- 分布式监控平台CAT原理
- Mybatis北冥有鱼面试
- 流星加速器木马分析与处置方案
- 风控决策引擎——决策流路径规划
- Linux 下重新挂载分区方法
- Python安装和导入cv库
- 马化腾入选全球最伟大50位领袖名单;vivo涉嫌虚假宣传;高通裁员1500人丨价值早报...