方法中的synchronized
关键字是否阻止在一个实例中并发运行或多个线程同时调用?
我们有一个对象和一些synchronized
方法以及不同的线程。
我读到同步方法阻止多个线程在一个对象上调用同步方法,但是不同的线程如何同时运行synchronized
方法?
感谢。
答案 0 :(得分:3)
我们有一个对象和一些同步方法和不同 线程。
方法同步将使用当前实例(this)作为锁,因此,如果只有on对象,则多个线程不能同时运行这些方法。
方法中的synchronized关键字是否阻止并发运行或 在一个实例中由多个线程同时调用?
阻止多个线程同时运行。
但是不同的线程如何运行同步方法 同时?
不,他们不能同时运行。
答案 1 :(得分:1)
如果您的课程类似于此,
class C {
public synchronized void method1() { ... }
public synchronized void method2() { ... }
}
您不能任意两个线程同时运行method1
或method2
,或两者的任意组合。
使用同步方法时,您声明最多一个线程可能在任何给定的瞬间运行其中一个同步方法。
如果您希望同时运行方法,则可能需要考虑管理多个锁(同步块,而不是方法,使用除this
之外的某些监视器。)
也许你应该从this lesson开始。
首先,对同一对象的两个同步方法的调用不可能进行交错。当一个线程正在为对象执行同步方法时,所有其他线程都会调用同一对象的同步方法阻塞(暂停执行),直到第一个线程完成对象为止。