我試圖了解 Java Thread 類中幕后發生的事情 - 這是場景
情景 1
我有這樣的主要課程
public class LoadBalancerUpStreamManagement extends Thread{
public static void main(String args[]){
LoadBalancerUpStreamManagement loadBalancerUpStreamManagement = new LoadBalancerUpStreamManagement();
loadBalancerUpStreamManagement.start();
}
}
在上述場景中,由于我們擴展Thread了類,因此它start method也繼承了。當我們呼叫start methodon objectloadBalancerUpStreamManagement時,它會啟動并且 JVM 在內部呼叫run新執行緒上的方法。到目前為止有意義。
現在考慮另一種情況
public class LoadBalancerUpStreamManagement extends Thread{
public static void main(String args[]){
LoadBalancer elb = new LoadBalancer();
new Thread(elb); ---> 2. It gives me constructor error - Can not resolve constructor Thread(LoadBalancer)
}
}
class LoadBalancer { ------> 1. I have not extended the Thread class here
}
我無法理解,為什么重要的是extends Thread Class- 哪個 OOPS 概念正在打破以及幕后發生了什么?
如果我擴展Thread課程,那么一切都很好。
public class LoadBalancerUpStreamManagement extends Thread{
public static void main(String args[]){
LoadBalancer elb = new LoadBalancer();
new Thread(elb); ------> 2. It is all good here.
}
}
class LoadBalancer extends Thread{ ---> 1. Extended Thread Class
}
uj5u.com熱心網友回復:
Thread 類幾乎沒有可用的建構式,其中之一是 Runnable
Thread(Runnable target)
完整串列可以在這里找到:https ://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html
另一個重要的事情是Thread類實作了Runnable介面。因此,無論哪個類擴展Thread也可以使用您提到Runnable的方法來實作。run這就是為什么您可以傳遞Thread在該建構式中擴展的類 - 因為它們是 instanceofRunnable
uj5u.com熱心網友回復:
查看類java.lang.Thread1的源代碼。
它有一個Runnable成員。
/* What will be run. */
private Runnable target;
但是,此成員可能為空。因此類Thread也實作了Runnable
public class Thread implements Runnable
現在看一下run類中方法的代碼Thread
public void run() {
if (target != null) {
target.run();
}
}
如果target為 null,則方法run不執行任何操作。
因此,您有兩種選擇。
- 為成員賦值
target——這只能通過類Thread2的建構式之一來完成。請注意,此值可以是任何實作的類的實體Runnable。它不必是另一個擴展的類,Thread并且從 Java 8 開始,它也可以是lambda 運算式。
public class LoadBalancerUpStreamManagement extends Thread{
public static void main(String args[]){
LoadBalancer elb = new LoadBalancer();
new Thread(elb);
}
}
class LoadBalancer implements Runnable {
public void run() {
System.out.println("Replace with your code.");
}
}
或者
public class LoadBalancerUpStreamManagement extends Thread{
public static void main(String args[]){
new Thread(() -> System.out.println("Replace with your code.")); // lambda expression
}
}
- 撰寫一個擴展
Thread并覆寫其run方法的類(正如您所做的那樣)。
1源代碼包含在 JDK 中。src.zip在安裝 JDK 的目錄下查找檔案。
2類Thread參考javadoc
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/419766.html
標籤:
