synchronized(this)是否意味着当前线程对象获得了自己的锁?

时间:2012-06-15 15:07:23

标签: java multithreading

考虑以下代码 -

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) {

            }
        }
    }
}

在上面的例子中,Thread m是否获得了锁定?

3 个答案:

答案 0 :(得分:5)

当前线程获取MyThread类的关联实例上的锁。

synchronized(this)synchronized(m)中锁定与main()相同的对象。

最后,

public void run() {
    synchronized (this) {

完全等同于

public synchronized void run() {

答案 1 :(得分:1)

是的,这正是它的含义。线程获取类的实例(MyThread)的锁。

答案 2 :(得分:0)

您必须将其视为任何其他java对象。你输入的内容意味着其他线程无法访问这个java对象(如果它是一个线程实例,则独立,因为它没有区别。