Rozważmy następujący kod:Jak działa metoda join() klasy Thread?
class ThreadJoinTest{
public static void main(String[] arguments){
TimeUnit unit;
final Thread taskThread = new Thread(task);
taskThread.start();
taskThread.join(unit.millis(timeout));
}
}
Więc gdy główny wątek będzie wykonać linię taskThread.join()
o wartości limitu czasu, główny wątek jest dając wystarczająco dużo czasu, aby zakończyć taskThread
swoje zadanie? Czy jest to główny cel metody łączenia?
Co się stanie, jeżeli:
taskThread
zakończy realizację przed czasem przerwa?- Co się stanie, jeśli limit czasu zostanie osiągnięty, ale
taskThread
nie zakończył jeszcze wykonywania? CzytaskThread
ma szansę zakończyć swoje zadanie, czy nie? - W jaki sposób główny wątek wie, że join został zwrócony, ponieważ
taskThread
zakończył się normalnie lub z powodu przekroczenia limitu czasu?
Myślę, że twoja odpowiedź odpowiada na dwa pierwsze pytania, ale nie na trzeci. Ponieważ powrót z łączenia jest typu void, jak główny wątek wie, czy wątek taskThread został ukończony normalnie, czy z powodu limitu czasu? – Geek
@Geek: Dodano więcej informacji. – Keppil
więc jest to usterka w projekcie .. co o tym myślisz? – Geek