我有一个非常简单的代码,但无法理解。
public class Test extends Thread {
public synchronized void testPrint() {
System.out.println("I am sleeping..."
+ Thread.currentThread().getName());
try {
Thread.sleep(3000);
System.out.println("I am done sleeping..."
+ Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void run() {
Test t = new Test();
t.testPrint();
System.out.println("I am out..." + Thread.currentThread().getName());
}
public static void main(String[] args) {
Test t1 = new Test();
Test t2 = new Test();
t1.start();
t2.start();
}
}
这是我的问题
当两个线程执行时Test t = new Test()
,这是否会创建两个具有相同名称的不同对象?在多线程的这条线上会发生什么?
我得到低于结果,
我在睡觉……Thread-0
我在睡觉... Thread-1
我睡完了……Thread-0
我出去了……Thread-0
我睡完了……Thread-1
我出去了……Thread-1
从输出来看,这肯定意味着创建了两个对象,这就是为什么两个线程都可以进入同步方法的原因。希望我的理解是正确的?系统如何维护这两个对象?