4

次のコードを考えてみましょう-

class MyThread extends Thread {
    private int x = 5;

    public void run() {
        synchronized (this) // <-- what does it mean?
        {
            for (int i = 0; i < x; i++) {
                System.out.println(i);
            }
            notify();
        }
    }
}

class Test {
    public static void main(String[] args) {
        MyThread m = new MyThread();
        m.start();

        synchronized (m) {
            try {
                m.wait();
            } catch (InterruptedException e) {

            }
        }
    }
}

上記の例では、スレッドmはそれ自体のロックを取得しますか?

4

3 に答える 3

5

MyThread現在のスレッドは、クラスの関連付けられたインスタンスのロックを取得します。

はとsynchronized(this)同じオブジェクトをロックしていsynchronized(m)ますmain()

ついに、

public void run() {
    synchronized (this) {

とまったく同じです

public synchronized void run() {
于 2012-06-15T15:08:33.863 に答える
1

はい、それはまさにそれが意味することです。スレッドは、クラスのインスタンス(MyThread)のロックを取得します。

于 2012-06-15T15:08:43.437 に答える
0

他のJavaオブジェクトと同じように表示する必要があります。入力した内容は、他のスレッドがこのJavaオブジェクトにアクセスできないことを意味します(スレッドインスタンスであるかどうかに関係なく、違いがないためです。

于 2012-06-15T15:11:12.770 に答える