Java 静态和非静态多线程
假设我有一个包含静态和非静态同步方法的类,并且一个线程尝试访问静态方法。因此,将在类上获取锁。现在我的问题是,如果另一个线程同时尝试访问非静态方法,它是否能够访问它?Java中的每个类在运行时都会获得一个Java 静态和非静态多线程,java,Java,假设我有一个包含静态和非静态同步方法的类,并且一个线程尝试访问静态方法。因此,将在类上获取锁。现在我的问题是,如果另一个线程同时尝试访问非静态方法,它是否能够访问它?Java中的每个类在运行时都会获得一个类实例。在类或静态方法上进行同步时,就是在该实例上进行同步 public static synchronized void doSomething() {} // or explicit synchronized (YourClass.class) {} 如果线程在另一个线程中,这两个线程中的
类实例。在类或静态
方法上进行同步时,就是在该实例上进行同步
public static synchronized void doSomething() {}
// or explicit
synchronized (YourClass.class) {}
如果线程
在另一个线程中,这两个线程中的任何一个都会被阻塞,因为YourClass.class
返回同步方法正在使用的class
实例
对于实例方法
public synchronized void doOther() {}
// or explicit
synchronized (instance)
隐式执行调用doOther()
synchronized (this)
围绕着这个方法
在静态
情况下,您正在类
实例上同步
。在实例
案例中,您正在对类的实例进行同步
。那是两个不同的监视器。因为它们是不同的监视器,所以启用线程
执行静态doSomething()
不会阻止另一个线程
执行实例doOther()
Java中的每个类在运行时都会获得一个类
实例。在类或静态
方法上进行同步时,就是在该实例上进行同步
public static synchronized void doSomething() {}
// or explicit
synchronized (YourClass.class) {}
如果线程
在另一个线程中,这两个线程中的任何一个都会被阻塞,因为YourClass.class
返回同步方法正在使用的class
实例
对于实例方法
public synchronized void doOther() {}
// or explicit
synchronized (instance)
隐式执行调用doOther()
synchronized (this)
围绕着这个方法
在静态
情况下,您正在类
实例上同步
。在实例
案例中,您正在对类的实例进行同步
。那是两个不同的监视器。因为它们是不同的监视器,所以启用线程
执行静态doSomething()
不会阻止另一个线程
执行实例doOther()
是。
静态同步方法锁定在类对象上e、 g.对于MyClass类,其MyClass.class
而实例同步方法锁定Java中由“this”关键字表示的对象的当前实例 由于这两个对象是不同的,它们有不同的锁,所以当一个线程执行静态同步方法时,java中的另一个线程不需要等待该线程返回,相反,它将获取单独的锁表示字节 阅读更多内容是。 静态同步方法锁定在类对象上
e、 g.对于MyClass类,其MyClass.class
而实例同步方法锁定Java中由“this”关键字表示的对象的当前实例 由于这两个对象是不同的,它们有不同的锁,所以当一个线程执行静态同步方法时,java中的另一个线程不需要等待该线程返回,相反,它将获取单独的锁表示字节
阅读更多内容如果没有其他线程在同一对象上调用相同的方法(或其他已同步的方法),它将能够访问它。您的最佳选择是尝试它。如果没有其他线程在同一对象上调用相同的方法(或其他同步方法),它将能够访问它。你最好试试看。