У вас уже есть поток, выполняющий метод updateBoard()
. Пусть этот поток будет T1
.
Вы вызываете animate()
и создаете другой поток, пусть этот поток будет T2 . Now as per your question, you want to have T1
и не будет работать до тех пор, пока T2
не завершит выполнение.
Thread.java
определяет метод join () , он позволяет одному потоку ожидать завершения другого. В вашем коде это можно сделать следующим образом.
static Thread animationThread = new Thread(new Runnable() {
public void run() {
try {
/* Code */
Thread.sleep(500);
} catch (InterruptedException ex) {}
}
});
public static void updateBoard(int column, Image image) {
int i = 0;
animate(column,image);
animationThread.join(); // this will make the thread executing updateBoard to wait until the completion of animationThread.
i++;
}
public static void animate(int column,Image image){
animationThread .start();
}
Но теперь каждая вещь выполняется одна за другой, в этом случае нет смысла использовать два потока. Это похоже на
public static void updateBoard(int column, Image image) {
int i = 0;
animate(column,image);
i++;
}
public static void animate(int column,Image image){
try {
/* Code */
Thread.sleep(500);
} catch (InterruptedException ex) {}
}
В этом случае также до тех пор, пока метод animate не завершится (без 2-го потока), i ++ не будет выполняться. Следовательно, для варианта использования в вашем вопросе наличие отдельного потока для анимации не имеет смысла, это только увеличивает накладные расходы на создание отдельного потока и переключение контекста. Хотя наличие отдельного потока для анимации кажется хорошей идеей, но для этого вам нужно реструктурировать имеющуюся программу, так как logi c основан на параллельном выполнении, так что наличие нескольких потоков имеет смысл.