博客
关于我
使用synchronized修饰静态方法和非静态方法有什么区别
阅读量:427 次
发布时间:2019-03-06

本文共 676 字,大约阅读时间需要 2 分钟。

Synchronized修饰非静态方法和静态方法在Java中的行为有显著不同。以下是详细解释:

  • Synchronized修饰非静态方法

    • 作用:对每个对象实例施加锁,确保同一时间只有一条线程访问该对象的方法。
    • 情况分析
      • 同一对象的多个同步方法:如a.isSyncA()与a.isSyncB(),会产生互斥,因为它们使用同一对象锁。
      • 不同对象的同步方法:如a.isSyncA()与b.isSyncA(),不会互斥,因为每个对象有自己的锁。
  • Synchronized修饰静态方法

    • 作用:对类对象施加锁,确保同一时间只有一条线程访问该类的静态方法。
    • 情况分析
      • 同一类的多个静态同步方法:如cSyncA()与cSyncB(),会互斥,因为它们使用同一类锁。
      • 不同对象调用同一类的静态方法:如x.cSyncA()与y.cSyncB(),会互斥,因为它们使用同一类锁。
      • 不同类的静态方法:如x.cSyncA()与y.dSyncA(),不会互斥,因为它们使用不同的类锁。
  • 示例分析

    • 选项a:a.isSyncA()与a.isSyncB() - 同一对象的同步实例方法,互斥。
    • 选项b:a.isSyncA()与y.isSyncA() - 不同对象的同步实例方法,不互斥,可同时访问。
    • 选项c:x.cSyncA()与y.cSyncB() - 同一类的静态方法,互斥,不可同时访问。
    • 选项d:x.isSyncA()与Something.cSyncA() - 不同锁类型,不互斥,可同时访问。

    结论:选项b和d可以被同时访问,而选项a和c则不行。正确答案是选项b和d。

    转载地址:http://hruyz.baihongyu.com/

    你可能感兴趣的文章
    PoolingHttpClientConnectionManager原理剖析
    查看>>
    QT教程1:ubuntu18.04安装QT5
    查看>>
    POP-一个点击带有放大还原的动画效果
    查看>>
    POP3 协议在计算机网络中的优缺点
    查看>>
    qt批量操作同类型控件
    查看>>
    Portaudio笔记-WASAPI
    查看>>
    position:fixed失效情况
    查看>>
    Qt开发笔记:QGLWidget、QOpenGLWidget详解及区别
    查看>>
    Position属性四个值:static、fixed、absolute和relative的区别和用法
    查看>>
    POSIX thread编程中关于临界区内条件变量的分析
    查看>>
    POSIX与程序可移植性
    查看>>
    posix多线程有感--自旋锁
    查看>>
    SpringBoot中集成海康威视SDK实现布防报警数据上传/交通违章图片上传并在linux上部署(附示例代码资源)
    查看>>
    POSIX标准和XSI扩展
    查看>>
    post install error,please remove node_moules before retry
    查看>>
    postcss-pxtorem 参数之selectorBlackList、exclude的用法
    查看>>
    Postek博思得标签打印机更换电脑,打印出来标签空白
    查看>>
    postfix+ dovecot搭建邮件服务器
    查看>>
    postfix在邮件服务器中的使用
    查看>>
    PostGIS 3.1.2软件安装详细教程(地图工具篇.8)
    查看>>