同时调用/运行同步方法

时间:2014-02-19 10:25:50

标签: java multithreading concurrency synchronized

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

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

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

感谢。

2 个答案:

答案 0 :(得分:3)

  

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

方法同步将使用当前实例(this)作为锁,因此,如果只有on对象,则多个线程不能同时运行这些方法。

  

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

阻止多个线程同时运行。

  

但是不同的线程如何运行同步方法   同时?

不,他们不能同时运行。

答案 1 :(得分:1)

如果您的课程类似于此,

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

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

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

如果您希望同时运行方法,则可能需要考虑管理多个锁(同步块,而不是方法,使用除this之外的某些监视器。)

也许你应该从this lesson开始。

  

首先,对同一对象的两个同步方法的调用不可能进行交错。当一个线程正在为对象执行同步方法时,所有其他线程都会调用同一对象的同步方法阻塞(暂停执行),直到第一个线程完成对象为止。