考虑以下代码 -
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是否获得了锁定?
答案 0 :(得分:5)
当前线程获取MyThread
类的关联实例上的锁。
synchronized(this)
在synchronized(m)
中锁定与main()
相同的对象。
最后,
public void run() {
synchronized (this) {
完全等同于
public synchronized void run() {
答案 1 :(得分:1)
是的,这正是它的含义。线程获取类的实例(MyThread)的锁。
答案 2 :(得分:0)
您必须将其视为任何其他java对象。你输入的内容意味着其他线程无法访问这个java对象(如果它是一个线程实例,则独立,因为它没有区别。