2013-07-02 3 views
2

Я хотел бы знать, является ли плохая идея вызывать метод блокировки из самого конструктора.Вызов метода блокировки из конструктора - Java

Мне любопытно узнать, есть ли у нас какие-либо рекомендации/правила в таком сценарии, что мы никогда не должны вызывать методы блокировки в Constructor.

В основном я пытаюсь сделать это:

class A 
{ 
    // Many instance variables that is to be initialized on instantiaion 
    String tempVar = null; 

    public A() 
    { 
     // Initialize all the instance variables 
     tempVar=objectClassB.**callBlockingMethod**(); // this method call would return 
                 // some data from ClassB Object 
    } 

    public static void main(String args ...) 
    { 
     A a = new A(); 
     // Or should I call the blocking method call only after instantiation according 
     // to any guidelines of Java pertaining to performance ? 

     // IMPORTANT: It's only when the blocked method returns value , should the main 
     // thread proceed as the object 'a' would be sent for further processing 
    } 
} 

PS: Да, я извиняюсь, если мой вопрос звучит очень простой.

+3

Пожалуйста, определите здесь «блокировку» - вы ожидаете, что он займет неопределенное количество времени? Обычно конструкторы должны быть довольно простыми - вы бы не хотели, чтобы цикл навсегда слушал TCP-соединения, например ... но это нормально, чтобы сделать некоторые вызовы методов. –

+0

Привет @JonSkeet, Большое спасибо за ваш быстрый ответ. Да, я имел в виду «Блокирование» здесь в том же смысле, что и вы упомянули. Я пытаюсь слушать входящее соединение через bluetooth и инициализировать переменную «соединение» по возвращаемому значению вызова метода блокировки. Чтобы быть предельно ясным, я пытаюсь это сделать: StreamConnection con = notifier.acceptAndOpen(); -> in constructor // где notifier == типа StreamConnectionNotifier – Chandru

ответ

1

Я думал, что его лучше вы можете создать один метод, как Connect() внутри класса А. После создания объекта можно назвать как

Аа = новый A() A.connect()

Внутри метода подключения можно определить метод блокирования StreamConnection кон = notifier.acceptAndOpen() .....

если ваш блокирующий вызов не возвращается в заданный период времени, вы считаете, какой-то механизм, чтобы восстановить этот сценарий

+0

@ «Jojo John» да, конечно, спасибо. Поэтому я понимаю, что есть некоторые проблемы/проблемы с производительностью при вызове этого метода на cosntructor. Будет ли реализован так, как вы предполагали, и обработайте их некоторыми потоками. – Chandru

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