Komunikasi Interthread
Jika Anda mengetahui komunikasi antarproses maka akan mudah bagi Anda untuk memahami komunikasi interthread. Komunikasi interthread penting ketika Anda mengembangkan aplikasi di mana dua atau lebih utas bertukar beberapa informasi.
Ada tiga metode sederhana dan sedikit trik yang memungkinkan komunikasi utas. Ketiga metode tersebut tercantum di bawah ini -
Sr.No. | Metode & Deskripsi |
---|---|
1 | public void wait() Menyebabkan utas saat ini menunggu hingga utas lain memanggil notify (). |
2 | public void notify() Membangunkan satu utas yang menunggu di monitor objek ini. |
3 | public void notifyAll() Membangunkan semua utas yang memanggil wait () pada objek yang sama. |
Metode ini telah diterapkan sebagai finalmetode di Object, sehingga tersedia di semua kelas. Ketiga metode hanya dapat dipanggil dari dalam asynchronized konteks.
Contoh
Contoh ini menunjukkan bagaimana dua utas dapat berkomunikasi menggunakan wait() dan notify()metode. Anda dapat membuat sistem yang kompleks dengan menggunakan konsep yang sama.
class Chat {
boolean flag = false;
public synchronized void Question(String msg) {
if (flag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(msg);
flag = true;
notify();
}
public synchronized void Answer(String msg) {
if (!flag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(msg);
flag = false;
notify();
}
}
class T1 implements Runnable {
Chat m;
String[] s1 = { "Hi", "How are you ?", "I am also doing fine!" };
public T1(Chat m1) {
this.m = m1;
new Thread(this, "Question").start();
}
public void run() {
for (int i = 0; i < s1.length; i++) {
m.Question(s1[i]);
}
}
}
class T2 implements Runnable {
Chat m;
String[] s2 = { "Hi", "I am good, what about you?", "Great!" };
public T2(Chat m2) {
this.m = m2;
new Thread(this, "Answer").start();
}
public void run() {
for (int i = 0; i < s2.length; i++) {
m.Answer(s2[i]);
}
}
}
public class TestThread {
public static void main(String[] args) {
Chat m = new Chat();
new T1(m);
new T2(m);
}
}
Ketika program di atas dipenuhi dan dijalankan, ini menghasilkan hasil sebagai berikut -
Keluaran
Hi
Hi
How are you ?
I am good, what about you?
I am also doing fine!
Great!
Contoh di atas telah diambil dan kemudian diubah dari [https://stackoverflow.com/questions/2170520/inter-thread-communication-in-java]