结合下面一段java代码,请问一下synchronized 块对当前对象和其他对象有是什么区别?
怪我咯
怪我咯 2017-04-17 17:41:03
0
5
457

使用Synchronized (this) 对当前对象进行同步化,这很容易理解;
但对其他对象同步化,应该怎样理解?比如下面的代码,synchronized(syncObject) 语句,syncObject 就是一个普通对象Object,这样又有什么意义了?

import static net.mindview.util.Print.*;

class DualSynch {
  private Object syncObject = new Object();
  public synchronized void f() {
    for(int i = 0; i < 5; i++) {
      print("f()");
      Thread.yield();
    }
  }
  public void g() {
    synchronized(syncObject) {
      for(int i = 0; i < 5; i++) {
        print("g()");
        Thread.yield();
      }
    }
  }
}

public class SyncObject {
  public static void main(String[] args) {
    final DualSynch ds = new DualSynch();
    new Thread() {
      public void run() {
        ds.f();
      }
    }.start();
    ds.g();
  }
}
怪我咯
怪我咯

走同样的路,发现不同的人生

모든 응답(5)
洪涛

각 객체에는 객체 잠금이 있으며,
syncdhronized(syncObject) 는 syncObject의 객체 잠금을 사용하고,
public synchronized void f()는 ds의 객체 잠금을 사용합니다

이 코드에서는 두 개의 잠금이 사용됩니다. 메소드 f가 실행되면 ds 객체의 잠금을 획득해야 하며, 메소드 g가 실행되면 syncObject의 객체 잠금을 획득해야 합니다. 이 두 자물쇠는 서로 아무 관련이 없습니다.

洪涛

제가 이해한 바에 따르면 Java의 모든 객체에는 synchronized (this) 객체 자체를 잠그고 synchronized (object) 잠금으로 사용되는 객체를 잠급니다.

다음 코드의 두

블록은 두 블록의 잠금이 서로 다른 개체에 추가되므로 동기화를 구성하지 않습니다. synchronized 으아악

小葫芦

잠금 개체로 별도의 개체를 사용하세요. 이 경우 ReentrantLock을 사용한 다음 lock()unlock()synchronized으로 바꿀 수도 있습니다.

左手右手慢动作

public synchronized void f()은 개체 자체인 synchronized (this)과 동일합니다. synchronized(syncObject)는 다른 개체인 syncObject에 의해 잠겨 있습니다.
결과는 다음과 같습니다. 새 DualSynch 객체를 생성하면 f() 메서드와 g() 메서드는 두 스레드에서 동시에 실행될 수 있지만 두 스레드에서는 f()f()을 동시에 실행할 수 없습니다. . g()g()은 동시에 실행할 수 없습니다.

Peter_Zhu

public synchronized void f()synchronized(this)에 비해 synchronized(syncObject)Object syncObject의 객체 잠금을 얻습니다.

스레드가 개체의 f()에 액세스하면 이 개체의 개체 잠금을 획득하고 개체의 모든 동기화 코드 부분에 대한 다른 스레드의 액세스가 일시적으로 차단됩니다. 그러나 다른 스레드는 synchronized(this)을 포함하여 개체의 동기화되지 않은 코드 블록에 계속 액세스할 수 있습니다. 마찬가지로 한 스레드가 개체의 Object syncObject에 액세스하면 개체 g()에 대한 다른 스레드의 액세스는 다음과 같습니다. 일시적으로 차단되었지만 g()에 해당하는 synchronized(this)에는 계속 액세스할 수 있습니다. f()

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!