Различия между методами wait () и join () в Java
The wait() and join() methods are used to pause the current thread. The wait() is used in with notify() and notifyAll() methods, but join() is used in Java to wait until one thread finishes its execution.
wait() is mainly used for shared resources, a thread notifies other waiting thread when a resource becomes free. On the other hand join() is used for waiting a thread to die.
Сходства между wait () и join ()
- Оба метода wait () и join () используются для приостановки текущего потока в Java.
- Оба метода wait () и join () могут быть прерваны вызовом метода interrupt () в Java.
- Оба метода wait () и join () - нестатический.
- И wait (), и join () перегружены в Java. wait () и join (), которые без тайм-аута, а также принимают параметр тайм-аута.
Разница между методом wait () и join ()
- Наиболее очевидная разница, оба представлены разными пакетами, метод wait () объявлен в классе java.lang.Object, а join () объявлен в классе java.lang.Thread.
- Wait () используется для межпотоковой связи, в то время как join () используется для добавления последовательности между несколькими потоками, один поток начинает выполнение после завершения выполнения первого потока.
- Мы можем запустить ожидающий поток (перешел в это состояние, вызвав wait ()), используя методы notify () и notifyAll (), но мы не можем прервать ожидание, вызванное соединением, без прерывания или прерывания потока, на котором вызывается соединение, выполняется законченный.
- Одно из наиболее важных различий между wait () и join (), то есть wait (), должно вызываться из синхронизированного контекста, то есть из синхронизированного блока или метода, иначе он вызовет исключение IllegalMonitorStateException, но, с другой стороны, мы можем вызвать метод join () с синхронизацией и без нее. контекст в Java.
Пример соединения
// Java program to explain the use of join()
class
A
extends
Thread {
@Override
public
void
run()
{
for
(
int
i =
1
; i <=
4
; i++) {
try
{
Thread.sleep(
100
);
}
catch
(Exception e) {
System.out.println(e);
}
System.out.print(i +
" "
);
}
}
}
class
B
extends
Thread {
@Override
public
void
run()
{
for
(
char
i =
'a'
; i <=
'd'
; i++) {
try
{
Thread.sleep(
100
);
}
catch
(Exception e) {
System.out.println(e);
}
System.out.print(i +
" "
);
}
}
}
class
GFG
extends
Thread {
public
static
void
main(String args[])
{
// creating two threads
A a1 =
new
A();
B b1 =
new
B();
// starts second thread after when
// first thread a1 is died.
a1.start();
try
{
a1.join();
}
catch
(Exception e) {
System.out.println(e);
}
// after thread a1 execution finished
// then b1 thread start
b1.start();
}
}
Выход:
1 2 3 4 abcd
Пример ожидания
// Java program to explain the
// concept of Waiting a thread.
class
PNBCustomer {
// let a initial amount is 9000
int
amount =
9000
;
// synchronized function because i wil use for
// waiting thread. Here synchronized means inter-
// thread communication
synchronized
withdraw(
void
int
amount)
{
System.out.println(
"withdrawing..."
);
// check if balance amount is less than withdraw
// amount in this condition. deposit() synchronized
// method call and deposit amount after that this
// thread again execute
if
(
this
.amount < amount) {
System.out.println("Amount is not enough; waiting +
" for deposit..."
);
try
{
wait();
}
catch
(Exception e) {
}
}
System.out.println(
"after deposit, balance is available: "
+
this
.amount);
this
.amount -= amount;
System.out.println(
"withdraw completed..."
);
System.out.println(
"after Withdraw, balance is available: "
+
this
.amount);
}
synchronized
void
deposit(
int
amount)
{
System.out.println(
"going to deposit..."
);
this
.amount += amount;
System.out.println(
"deposit completed... "
);
notify();
}
}
public
class
Wait {
public
static
void
main(String args[])
{
final
PNBCustomer c =
new
PNBCustomer();
// create two new thread and start
// them simultaneously
new
Thread() {
@Override
public
void
run()
{
c.withdraw(
15000
);
}
}.start();
new
Thread() {
@Override
public
void
run()
{
c.deposit(
10000
);
}
}.start();
}
}
Выход:
снятие ... Суммы не хватает; жду депозита ... собираюсь внести ... депозит завершен ... после депозита доступен баланс: 19000 снятие завершено ... после вывода доступен баланс: 4000
Вниманию читателя! Не прекращайте учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .