2015-07-24 3 views
0

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

Вопрос в том, как можно объединить поток после завершения одного потока?

Пример кода.

new Thread(new Runnable() { 
     @Override 
     public void run() 
     { 
      //Load stuff completed. 
      otherClassMethod(Thread.currentThread(), new ResultInterface(){ 

       @Override 
       public void completed(){ 
        //Start App. 
       } 

      }) 
     } 
    }); 

    public void otherClassMethod(Thread thread, ResultInterface resultInterface) 
    { 


     //Create stuff that needs open gl context. 
     //..... 
     //-- end create stuff. 

     Thread thisThread = Thread.currentThread() 
     thisThread.merge(thread); //?? Where I'm stuck. 
     ResultInterface.completed 
    } 
+3

Метод называется 'Join()', 'не сливаются()'. Это так просто: – biziclop

+0

Что вы подразумеваете под слиянием? Вы хотите, чтобы 2 потока имели доступ к тем же данным? –

+1

Хотя я, вероятно, избежу управления потоками вручную, посмотрите на ['ExecutorService'] (https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html) вместо этого, это требует много хлопот из многопоточности. – biziclop

ответ

2

Чтобы подождать, пока другая тема будет завершена, позвоните по номеру otherThread.join(). Это блокирует текущий поток до тех пор, пока не закончится otherThread.

EDIT (из вашего примера):

public void otherClassMethod(Thread thread, ResultInterface resultInterface) 
{ 
    //Create stuff that needs open gl context. 
    //..... 
    //-- end create stuff. 

    thread.join(); 
    resultInterface.completed(); 
} 
+0

Получив это, otherThread? –

+1

@iLoveUnicorns Я включил метод из вашего примера. – Carsten

+0

Это работает как шарм, все еще озадаченный тем, как потоки работают за кулисами, хотя бы какая-то карта, я бы предположил? –

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