Java中静态和非静态方法之间共享的资源

Prashant Shilimkar

我知道static synchronized方法锁定在class对象上,而实例synchronized方法锁定在Object的当前实例上this

由于这两个对象都不相同,因此它们具有不同的锁,因此当一个线程正在执行static synchronized方法时,java中的其他线程不需要等待该线程返回,而是将获得单独的锁。

考虑以下示例

public class Test {
  static int count = 0;

  public synchronized void f1(){
    count++;
  }

  public static synchronized void f2(){
    count++;
  }
}

这里共享计数不是以互斥方式访问的,这可能导致在另一个线程使用方法递增时,错误count传递给的调用方f1()countstatic f2()

在这种情况下有什么解决方案?我是在问正确的问题吗?并且,如果是真实情况,那么Java应当避免什么解决方案?

加里坦

您可以在非静态方法上使用同步块,并且它应该使用与静态同步方法相同的监视器:

public void f1() {
   synchronized(Test.class) {
     count++;
   }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

了解堆上静态和非静态方法表示之间的区别

来自分类Dev

了解堆上静态和非静态方法表示之间的区别

来自分类Dev

Java静态/非静态方法

来自分类Dev

静态和非静态与泛型和Java中的通配符

来自分类Dev

在Java中的静态方法中调用非静态方法(非静态变量错误)

来自分类Dev

Windows 8.1存储应用程序中是否可以在页面和用户控件之间共享静态资源?

来自分类Dev

从Java中的静态成员调用非静态方法

来自分类Dev

非静态方法如何访问Java中的静态成员?

来自分类Dev

如何在Java中对非静态方法进行静态引用?

来自分类Dev

在Clojure中调用Java非静态方法

来自分类Dev

无法理解 Java 中静态和非静态变量之间的区别。有人可以帮忙吗?

来自分类Dev

.Net 中的静态方法与非静态方法

来自分类Dev

在静态方法中调用非静态方法

来自分类Dev

为什么静态和非静态方法不能共享相同的签名?

来自分类Dev

静态和非静态资源有什么区别?

来自分类Dev

静态和非静态资源有什么区别?

来自分类Dev

c#静态方法和非静态方法之间的区别是什么?

来自分类Dev

双冒号的使用-静态和非静态方法引用之间的区别

来自分类Dev

Java中的静态方法和接口

来自分类Dev

在Java中的源代码和测试之间共享资源的推荐方法是什么?

来自分类Dev

如何使用powerMock在同一类中模拟静态方法和非静态方法?

来自分类Dev

静态方法与非静态方法

来自分类Dev

静态和非静态字段

来自分类Dev

角度和离子应用中的静态资源

来自分类Dev

从不同的非静态类中调用非静态方法

来自分类Dev

在一个类中混合使用静态和非静态方法是否可以接受?

来自分类Dev

线程中静态同步和非静态同步方法的行为差异

来自分类Dev

同一类中的Java静态和非静态变量

来自分类Dev

方法参考静态与非静态

Related 相关文章

  1. 1

    了解堆上静态和非静态方法表示之间的区别

  2. 2

    了解堆上静态和非静态方法表示之间的区别

  3. 3

    Java静态/非静态方法

  4. 4

    静态和非静态与泛型和Java中的通配符

  5. 5

    在Java中的静态方法中调用非静态方法(非静态变量错误)

  6. 6

    Windows 8.1存储应用程序中是否可以在页面和用户控件之间共享静态资源?

  7. 7

    从Java中的静态成员调用非静态方法

  8. 8

    非静态方法如何访问Java中的静态成员?

  9. 9

    如何在Java中对非静态方法进行静态引用?

  10. 10

    在Clojure中调用Java非静态方法

  11. 11

    无法理解 Java 中静态和非静态变量之间的区别。有人可以帮忙吗?

  12. 12

    .Net 中的静态方法与非静态方法

  13. 13

    在静态方法中调用非静态方法

  14. 14

    为什么静态和非静态方法不能共享相同的签名?

  15. 15

    静态和非静态资源有什么区别?

  16. 16

    静态和非静态资源有什么区别?

  17. 17

    c#静态方法和非静态方法之间的区别是什么?

  18. 18

    双冒号的使用-静态和非静态方法引用之间的区别

  19. 19

    Java中的静态方法和接口

  20. 20

    在Java中的源代码和测试之间共享资源的推荐方法是什么?

  21. 21

    如何使用powerMock在同一类中模拟静态方法和非静态方法?

  22. 22

    静态方法与非静态方法

  23. 23

    静态和非静态字段

  24. 24

    角度和离子应用中的静态资源

  25. 25

    从不同的非静态类中调用非静态方法

  26. 26

    在一个类中混合使用静态和非静态方法是否可以接受?

  27. 27

    线程中静态同步和非静态同步方法的行为差异

  28. 28

    同一类中的Java静态和非静态变量

  29. 29

    方法参考静态与非静态

热门标签

归档