Чӣ тавр кор мекунад усули Thread.join()?
sobes.tech AI
Ҷавоб аз AI
Раванди Thread.join() маҷбур мекунад, ки раванди ҳозира дар иҷроиш интизор шавад, то ки раванди join кардашуда ба анҷом расад.
Бо даъвати otherThread.join(), раванди ҳозира (масалан, main) боздошта мешавад, то он ки otherThread иҷрои худро ба анҷом расонад (усул run()-и он баргашта).
Мумкин аст, ки мӯҳлати интизориро дар миллисекунд ё дар миллисекунд ва наносекунд муайян кард:
otherThread.join(long millis): то ҳадди аққалmillisмиллисекунд интизор мешавад.otherThread.join(long millis, int nanos): то ҳадди аққалmillisмиллисекунд ваnanosнаносекунд интизор мешавад.
Агар мӯҳлати муайяншуда тамом шавад ва раванд ҳанӯз ба анҷом нарасида бошад, раванди ҳозира озод мешавад ва идома медиҳад.
Thread.join() метавонад, ки InterruptedException-ро барорад, агар раванди ҳозира дар вақти интизорӣ кӣ шавад. Дар ин ҳолат, интизорӣ қатъ мешавад.
Масалан:
// Эҷод ва оғоз кардани раванди нав
Thread worker = new Thread(() -> {
try {
// Намояндаи кор
Thread.sleep(2000);
System.out.println("Раванди корӣ ба анҷом расид.");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
worker.start();
try {
// Раванди асосӣ интизор мешавад, то раванди кориро ба анҷом расонад
worker.join();
System.out.println("Раванди асосӣ пас аз анҷоми корӣ идома медиҳад.");
} catch (InterruptedException e) {
e.printStackTrace();
}
Муҳим: join() иҷрои як равандро бо анҷоми дигар ҳамоҳанг мекунад. Ин барои таъмини он ки вазифаи муайян пеш аз идомаи иҷро дар раванди дигар ба анҷом расад, кӯмак мекунад.