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 回答