关于synchronized
来源:互联网 发布:安倍经济学知乎 编辑:程序博客网 时间:2024/06/09 16:14
1、synchronized
大家在学习线程中经常会遇到同步问题,而经常用的就是synchronized这个关键字,大家可以把他理解成锁,你也可以把修饰的方法看作原子性的,也就是说这个方法在执行时必须要执行完,中间不能被其他的线程所执行。
2、问题:当一个类中两个方法m1(),m2()
(1)m1用synchronized修饰m2不用,当我访问m1方法时能在访问m2吗?
(2)如果他们两个都用synchronized修饰,当我访问m1方法时能在访问m2吗?
3、代码如下
(1)
package com.smart.framework.thread;/** * Created with IntelliJ IDEA. * Description: */public class TT implements Runnable { @Override public void run() { m1(); } public synchronized void m1(){ try { Thread.sleep(10000); }catch (Exception e){ e.printStackTrace(); } System.out.println("m1--->"); } public void m2(){ System.out.println("m2--->"); } public static void main(String args[]){ TT tt=new TT(); Thread thread=new Thread(tt); thread.start(); try { Thread.sleep(2000); }catch (Exception e){ e.printStackTrace(); } tt.m2(); }}
结果如下:
解释一下,上面调用sleep方法不是必须的,只是为了错开时间进行验证,来放大这个效果。
可以看到当访问锁定的方法是不影响访问不锁定的方法。
(2)
package com.smart.framework.thread;/** * Created with IntelliJ IDEA. * Description: */public class TT implements Runnable { @Override public void run() { m1(); } public synchronized void m1(){ try { Thread.sleep(10000); }catch (Exception e){ e.printStackTrace(); } System.out.println("m1--->"); } public synchronized void m2(){ System.out.println("m2--->"); } public static void main(String args[]){ TT tt=new TT(); Thread thread=new Thread(tt); thread.start(); try { Thread.sleep(2000); }catch (Exception e){ e.printStackTrace(); } tt.m2(); }}
结果如下:
你会发现m2在m1之后运行,这说明在执行过程中是等m1执行完才开始执行m2的,就是在m1执行的过程中不能调用该对象的另一个被synchronized修饰的方法,必须等其结束才能执行。
阅读全文
0 0
- 关于synchronized
- 关于synchronized
- 关于synchronized
- 关于synchronized
- 关于synchronized
- 关于synchronized
- 关于synchronized
- 关于synchronized
- 关于synchronized
- 关于synchronized
- 关于 @synchronized
- 关于synchronized
- 关于volatile和synchronized
- 关于synchronized(this)
- 关于 synchronized 的使用
- 关于volatile和synchronized
- 关于synchronized(this)
- 关于synchronized(obj)
- nginx基于端口和ip配置
- 开源监控 prometheus初体验
- Educational Codeforces Round 26:B. Flag of Berland
- 线程池
- 51nod 1315 合法整数集
- 关于synchronized
- linux下搭建简单的git服务器测试1
- 实现响应式布局的方式-CSS3实现
- 树状数组简介(洛谷P3368、P3374)
- Color Length UVA
- Windows 下部署Jenkins相关插件总结
- 自动打包ipa文件,上传fir.im托管平台
- 全志R16平台的androidM系统下调通GC0308(分色排版)
- HDU6070(二分+线段树区间更新)