Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 静态和非静态多线程_Java - Fatal编程技术网

Java 静态和非静态多线程

Java 静态和非静态多线程,java,Java,假设我有一个包含静态和非静态同步方法的类,并且一个线程尝试访问静态方法。因此,将在类上获取锁。现在我的问题是,如果另一个线程同时尝试访问非静态方法,它是否能够访问它?Java中的每个类在运行时都会获得一个类实例。在类或静态方法上进行同步时,就是在该实例上进行同步 public static synchronized void doSomething() {} // or explicit synchronized (YourClass.class) {} 如果线程在另一个线程中,这两个线程中的

假设我有一个包含静态和非静态同步方法的类,并且一个线程尝试访问静态方法。因此,将在类上获取锁。现在我的问题是,如果另一个线程同时尝试访问非静态方法,它是否能够访问它?

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()

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中的另一个线程不需要等待该线程返回,相反,它将获取单独的锁表示字节


阅读更多内容

如果没有其他线程在同一对象上调用相同的方法(或其他已同步的方法),它将能够访问它。您的最佳选择是尝试它。如果没有其他线程在同一对象上调用相同的方法(或其他同步方法),它将能够访问它。你最好试试看。