[英]Calling/Running synchronized methods concurrently
是synchronized
的方法关键字,可避免同时运行或以一个实例被多个线程同时调用?
我们有一个对象,一些synchronized
方法和不同的线程。
我读到同步方法可以防止多个线程在一个对象上调用同步方法,但是,如何有不同的线程可以同时运行synchronized
方法呢?
谢谢。
我们有一个对象,一些同步方法和不同的线程。
方法上的同步将使用当前实例(this)作为锁,因此,如果仅对象上存在,则多个线程无法同时运行这些方法。
方法中的synced关键字是否防止在一个实例中同时运行或由多个线程并发调用?
防止多个线程同时运行。
但是,如何有不同的线程可以同时运行同步方法呢?
不,它们不能同时运行。
如果您有一个看起来像这样的课程,
class C {
public synchronized void method1() { ... }
public synchronized void method2() { ... }
}
您不能有任何两个线程同时运行method1
或method2
,或同时运行两者的任何组合。
使用同步方法时,您要声明在任何给定瞬间,最多有一个线程可能正在运行其中一种同步方法。
如果有,你想同时运行的方法,你可能需要寻找到管理多个锁(synchronized块,而不是方法,使用比其他一些显示器this
)。
也许您应该从本课开始。
首先,不可能对同一对象的两次同步方法调用进行交织。 当一个线程正在执行对象的同步方法时,所有其他调用同一对象块的同步方法的线程(挂起执行),直到第一个线程对该对象完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.