繁体   English   中英

同时调用/运行同步方法

[英]Calling/Running synchronized methods concurrently

synchronized的方法关键字,可避免同时运行或以一个实例被多个线程同时调用?

我们有一个对象,一些synchronized方法和不同的线程。

我读到同步方法可以防止多个线程在一个对象上调用同步方法,但是,如何有不同的线程可以同时运行synchronized方法呢?

谢谢。

我们有一个对象,一些同步方法和不同的线程。

方法上的同步将使用当前实例(this)作为锁,因此,如果仅对象上存在,则多个线程无法同时运行这些方法。

方法中的synced关键字是否防止在一个实例中同时运行或由多个线程并发调用?

防止多个线程同时运行。

但是,如何有不同的线程可以同时运行同步方法呢?

不,它们不能同时运行。

如果您有一个看起来像这样的课程,

class C {
    public synchronized void method1() { ... }
    public synchronized void method2() { ... }
}

不能有任何两个线程同时运行method1method2 ,或同时运行两者的任何组合。

使用同步方法时,您要声明在任何给定瞬间,最多有一个线程可能正在运行其中一种同步方法。

如果有,你想同时运行的方法,你可能需要寻找到管理多个锁(synchronized块,而不是方法,使用比其他一些显示器this )。

也许您应该从本课开始。

首先,不可能对同一对象的两次同步方法调用进行交织。 当一个线程正在执行对象的同步方法时,所有其他调用同一对象块的同步方法的线程(挂起执行),直到第一个线程对该对象完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM