2

これら 2 つのコード ブロックは同じように動作しますか? これらの実行メソッドはスレッドから呼び出されると想定できます。

public synchronized void run() {
    System.out.println("A thread is running.");
}

または

static Object syncObject = new Object();

public void run() {
    synchronized(syncObject) {
        System.out.println("A thread is running.");
    }
}
4

2 に答える 2

6
public synchronized void run()
{
    System.out.println("A thread is running.");
}

は次と同等です:

public void run()
{
    synchronized(this) // lock on the the current instance
    {
        System.out.println("A thread is running.");
    }
}

参考までに:

public static synchronized void run()
{
    System.out.println("A thread is running.");
}

は次と同等です:

public void run()
{
    synchronized(ClassName.class) // lock on the the current class (ClassName.class)
    {
        System.out.println("A thread is running.");
    }
}
于 2013-02-15T17:35:22.657 に答える
0

いいえ、あなたが言うように違いはありませんが、メソッドが静的なものだった場合、同期ブロックはロックとして囲んでいるクラスのクラス オブジェクトを持ちます。

于 2013-02-15T17:39:49.770 に答える