public class Qn {
static class Friend {
private final String name;
public Friend(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
// recipient - the person who greets
public synchronized void sayHi(Friend recipient) {
System.out.format("%s" + " said hi to %s %n",
this.name, recipient.getName());
}
}
public static void main(String[] args) {
final Friend john = new Friend("John");
final Friend peter = new Friend("Peter");
new Thread(new Runnable() {
public void run() {
john.sayHi(peter);
}
}, "thread1").start();
}
}
问题:
如果理解正确,请澄清以下内容
调用时john.sayHi()
, 线程thread1
已经获得了内在的
锁的john
对象以便访问sayHi()
的方法john
object.
线程thread1
在JVM中独立运行。
我在网上看到这些说法,不知道什么意思! 【线程怎么可以运行在对象上!!!事实上线程执行代码,对吗?]
线程thread1
不在 JVM 内的任何其他对象上运行。
线程永远不会在任何对象上运行。线程永远不会由对象执行。
一个线程永远不会在任何其他线程上运行。线程总是直接在 JVM 中运行。
调用时john.sayHi()
, 线程thread1
已获得内在锁定john
对象以便访问sayHi()
约翰对象的方法。
更确切地说:
调用时john.sayHi()
, 线程thread1
将等待,直到它可以获得锁john
执行之前sayHi
。一旦获得锁,就会执行sayHi
。当方法退出时,它将释放锁。
线程thread1
在JVM中独立运行。
独立于什么?其他线程?是的,直到它尝试获取锁为止。此时,它可能会受到其他线程的阻碍。当它有锁时,它可以阻止其他线程。
线程thread1
不在 JVM 内的任何其他对象上运行。
线程在 CPU 上运行,而不是在对象上运行。
你是问一个线程是否可以并行执行多个方法?如果是这样,答案是否定的。
线程永远不会在任何对象上运行。
线程在 CPU 上运行,而不是在对象上运行。
线程永远不会由对象执行。
线程不由任何东西执行。线程执行代码。
一个线程永远不会在任何其他线程上运行。
线程运行在CPU上,而不是线程上。
线程总是直接在 JVM 中运行。
JVM 有一个虚拟 CPU,线程在该虚拟 CPU 上运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)