2013-05-07 2 views
1

В Java, если у меня есть класс, который создает потоки из конструктора (вызывая некоторые функции этого класса), и я создаю объект этого класса в моем основном методе. Подходит ли основной метод до тех пор, пока все потоки не будут выполнены или продолжит ли следующая строка?делает основной метод до тех пор, пока все потоки не будут выполнены до выполнения следующей строки?

, например:

public static void main(String[] args) { 
    WorksWithThreads obj = new WorksWithThreads (); 

    //does something else - does this line happen after all the 9 threads finished their job? 
} 

class WorksWithThreads(){ 
    public WorksWithThreads(){ 
     for(int i=0;i<9;i++) 
      WithThread tread= new WithThread(); 
    } 

    private static class WithThread extends Thread { 

     public WithThread() { 
      run(); 
     } 

     public void run(){ 
      //does something 
     } 
    } 

} 

Я надеюсь, что я не был слишком запутанным .. Спасибо заранее .. Shiran

+1

Похоже, что это будет довольно легко проверить с сонной нитью и sysout. –

+6

Ваш код не вкл. Чтобы начать поток, необходимо вызвать метод start(). И нить не следует запускать из своего конструктора. –

ответ

1

No. Сама точка нитей является то, что они не остановить выполнение из нити, которая их порождает. main() продолжит выполнение, как только WorksWithThreads закончит размножение всех его потоков, но потоки, которые он порождает, будут выполняться одновременно с остальной частью main.

3

Если вы на самом деле порождать новые темы ваш главный метод будет продолжаться сразу после окончания нереста (но до конца резьбы, предполагая, что они работают на некоторое время)

НО вы не порождая темы. Вы создаете экземпляры класса Thread. Чтобы на самом деле создать новые потоки, вам нужно будет начать старт. Вызов run(), как и вы, является обычным вызовом метода, и обработка будет продолжаться только после его завершения.

Возможно, вы захотите работать через official tutorial about this topic.

+0

Правильно, я забыл об этом .. но как-то он работал даже без вызова start() ... Я сделал что-то подобное из конструктора .. это было для параллельного quicksort \t if (left Ohad

+2

Ну, вы вызвали run(), который выполняет ваш код, он просто работает последовательно в одном потоке. (судя по указанному вами коду) –

0

Да он будет работать после того, как 9 нити created.Here вы даже не начинать эти 9 threads.So перед выполнением следующей строки в основной будет выполнен

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