2017-02-16 37 views
0

在下面的代碼中,線程t1和t2屬於同一個對象嗎?如是?哪個對象。他們會競爭獲得顯示器或互斥鎖嗎?來自Java中主類的兩個內聯線程屬於同一個對象?

如果它們屬於不同的對象。怎麼樣?對監視器的解釋是有用的。

package com.java.thread.practice; 

public class InlineObject_SameThread { 

    public static void main(String[] args) { 

     Thread t1 = new Thread(new Runnable(){ 

      @Override 
      public void run() { 

      // Will this compete with thread t2 to acquire monitor ?? 

      } 

     }); 

     Thread t2 = new Thread(new Runnable(){ 

      @Override 
      public void run() { 

       // Will this compete with thread t1 to acquire monitor ?? 

      } 

     }); 

     // Starting the first thread. 

     t1.start(); 

     // Starting the second thread. 

     t2.start(); 

     /* There can be further logic, currently I will placing those as 
     * we progress. 
     */ 
    } 

    /* 
     Code ends. 
    */ 

} 
+2

線程(或一般的對象)不屬於其他對象。其他對象可能對這些線程有*引用*,但這不是所有權,不僅僅是知道我的電話號碼擁有我的手機的人。 –

+1

我從你的帖子中刪除_「我正在尋找討論」_。 StackOverflow顯然不適用於討論。另外,請注意我所做的其他格式更改,並瞭解如何格式化您的帖子和代碼。 –

+0

謝謝@AndyTurner。 這是否意味着這兩個線程引用相同的對象'this(InlineObject_SameThread)'? –

回答

0

在線程T1和T2屬於同一個對象?

線程不是屬於對象,對象也不屬於其他對象。對象可以保存引用到其他對象,包括Thread對象表示線程。有點迂腐,引用不屬於對象,它們只是價值。沒有任何對象可以擁有一個引用,只有它可以擁有值1.對象可以擁有變量其中存儲了引用。

他們競爭獲得顯示器或互斥鎖嗎?

儘管如此,線程並沒有無理由地獲取對象的顯示器。在你的例子中,任何線程都不會做任何會導致它嘗試獲取任何對象監視器的東西。當然,這樣的線程可能會被做成讓他們爭奪同一顯示器的工作,但這與他們稱之爲「內聯」無關。

如果它們屬於不同的對象。怎麼樣?對監視器的解釋是有用的。

每個Thread對象表示一個線程,它的存在基本上與線程創建的上下文無關。但是,只有main()有任何一個參考。監視器方面沒有任何解釋,因爲監視器根本沒有考慮因素。

此外,在main()中執行的代碼與任何對象都沒有關聯,因爲main()static。這些線程沒有任何屬於自己的對象。存在兩個Runnable()實例,但沒有理由斷言Thread屬於這些實例。如果有的話,你可能會認爲這是另一回事。

+0

謝謝。這些信息很有用,並消除了疑問。 –

相關問題