【发布时间】:2013-11-12 07:59:10
【问题描述】:
我有一个非常简单的代码但无法理解。
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()时,这是否会创建两个同名的不同对象?多线程的这一行会发生什么?
我得到低于结果,
我在睡觉...线程0
我在睡觉...线程 1
我睡完了……Thread-0
我出去了...线程0
我睡完了……Thread-1
我出去了...线程 1
从输出来看,这肯定意味着创建了两个对象,这就是为什么两个线程都可以进入同步方法的原因。希望我的理解是正确的? 系统如何维护这两个对象?
【问题讨论】:
-
synchronized 不同步方法,它同步对象。在您的情况下,这两个线程有自己的对象并且没有共享数据,因此它们没有理由进行交互。是的
new创建了一个新对象。
标签: java multithreading synchronized