首页 > 社交 > 科普中国

深入探索synchronized

常驻编辑 科普中国 2022-12-04 监视器   线程   变量   指令   计数器   前言   是非   例子   公平   对象   状态   作用   常用   代码   方法   科技

前言7c1拜客生活常识网

synchronized是Java中解决并发问题的常用方法,其主要作用如下:Reordering

基本使用7c1拜客生活常识网

synchronized修改方法和代码块。让我们看一个简单的例子7c1拜客生活常识网

publicclassSynTest{

公共无效锁测试(){
同步(这){
System.out.println(233);
}
}
}

使用javap-cSysTest.class反编译此代码7c1拜客生活常识网

从“SynTest.java”编译7c1拜客生活常识网

publicclasscom.happycode.lock.SynTest{
公众号快乐代码。锁。合成测试();
代码:
0:aload_0
1:invokespecial#1//方法java/lang/Object."":()V
4:返回
publicvoidlockTest();
代码:
0:aload_0
1:重复
2:astore_1
3:监控输入
4:getstatic#2//字段java/lang/System.out:Ljava/io/PrintStream;
7:西普什233
10:invokevirtual#3//方法java/io/PrintStream.println:(I)V
13:aload_1
14:监听退出
15:转到23
18:astore_2
19:aload_1
20:监听退出
21:aload_2
22:扔
23:返回
异常表:
从目标类型
41518任意
182118任意
}

我们需要注意的是monitorenter和monitorexit指令,这两个指令是jvm提供的。每个对象都有一个监视器锁(Monitor),当Monitor被占用时就会被锁定。monitorenter命令返回并尝试获取Monitor。如果Monitor的计数器为0,则表示获取成功,线程进入,Monitor计数器加1。如果不为0,则线程会被阻塞。也可以看出synchronized是不公平的。其实wait和notify也是依赖于monitor的Monitor。这就是为什么它们只能在同步块内。7c1拜客生活常识网


7c1拜客生活常识网

相关阅读:

  • 手机做单反监视器软件,单反相机手机监视器软件
  • Microsoft
  • Postman
  • 集合篇
  • 华硕天选3游戏本
  • Spring
  • 管理订单状态,该上状态机吗?
  • 从国产大飞机C919上的国产GPU看GPU的架构设计
  • 从20s优化到500ms,我用了这三招
  • MTT
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。