[英]Java Thread: Please clarify this understanding
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
對象。
線程thread1
在JVM中獨立運行。
我在網上閱讀了這些聲明,不確定它們的含義! [線程如何在對象上運行!!! Infact線程執行代碼,對嗎?]
線程thread1
不在JVM內部的任何其他對象上運行。
線程永遠不會在任何對象上運行。 線程永遠不會由對象執行。 一個線程永遠不會在任何其他線程上運行。 線程總是直接在JVM中運行。
Thread
對象。 Thread
對象的說明外,所有部分的答案都是肯定的。 調用
john.sayHi()
,線程thread1
已獲取john
對象的固有鎖定,以便訪問john
對象的sayHi()
方法。
更確切地說:
當調用john.sayHi()
,線程thread1
將等待直到可以獲取對john
的鎖,然后再執行sayHi
。 一旦獲得了鎖,它將執行sayHi
。 方法退出時,它將釋放鎖定。
線程
thread1
在JVM中獨立運行。
獨立於什么? 其他線程? 是的,直到嘗試獲取鎖為止。 到那時,其他線程可能會阻止它。 當它具有鎖時,它可以阻止其他線程。
線程
thread1
不在JVM內部的任何其他對象上運行。
線程運行在CPU上,而不是對象上。
您是在問一個線程是否可以並行執行多個方法? 如果是這樣,答案是否定的。
線程永遠不會在任何對象上運行。
線程運行在CPU上,而不是對象上。
線程永遠不會由對象執行。
線程不執行任何操作。 線程執行代碼。
一個線程永遠不會在任何其他線程上運行。
線程在CPU上運行,而不是線程。
線程總是直接在JVM中運行。
JVM具有運行線程的虛擬CPU。
見下文
調用john.sayHi()時,線程thread1已獲取john對象的固有鎖定,以便訪問john對象的sayHi()方法。
Ans->任何線程,如果它必須執行任何同步方法,那么它將獲得鎖。 對象鎖還是類鎖? 根據靜態或非靜態同步方法確定。 如果它是靜態的,則采用類鎖;如果非靜態的,則采用對象鎖。
線程thread1在JVM中獨立運行。
回答->如果線程不是守護進程,則它將獨立運行。 但是,如果線程是守護程序,則它依賴於其父線程,如果父線程去世,它將也被終止。
線程thread1不在JVM內部的任何其他對象上運行。
Ans->線程將不會在任何對象上運行,實際上沒有代碼在任何對象上運行。 畢竟所有對象都擁有執行狀態。
線程永遠不會在任何對象上運行。 線程永遠不會由對象執行。 一個線程永遠不會在任何其他線程上運行。 線程總是直接在JVM中運行。
Ans -> 100% true statement
讓我知道其他任何疑問
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.