2017-02-16 7 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

Спасибо. Информация полезна и устраняет сомнения. –

 Смежные вопросы

  • Нет связанных вопросов^_^