Giao tiếp giữa các luồng
Nếu bạn biết về giao tiếp giữa các quá trình thì bạn sẽ dễ dàng hiểu được giao tiếp giữa các luồng. Giao tiếp giữa các luồng rất quan trọng khi bạn phát triển một ứng dụng trong đó hai hoặc nhiều luồng trao đổi một số thông tin.
Có ba phương pháp đơn giản và một mẹo nhỏ giúp giao tiếp luồng có thể thực hiện được. Tất cả ba phương pháp được liệt kê dưới đây:
Sr.No. | Phương pháp & Mô tả |
---|---|
1 | public void wait() Làm cho luồng hiện tại đợi cho đến khi một luồng khác gọi thông báo (). |
2 | public void notify() Đánh thức một luồng duy nhất đang chờ trên màn hình của đối tượng này. |
3 | public void notifyAll() Đánh thức tất cả các luồng được gọi là wait () trên cùng một đối tượng. |
Các phương pháp này đã được thực hiện như finalcác phương thức trong Object, vì vậy chúng có sẵn trong tất cả các lớp. Cả ba phương thức chỉ có thể được gọi từ bên trongsynchronized bối cảnh.
Thí dụ
Ví dụ này cho thấy cách hai luồng có thể giao tiếp bằng cách sử dụng wait() và notify()phương pháp. Bạn có thể tạo một hệ thống phức tạp bằng cách sử dụng cùng một khái niệm.
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);
}
}
Khi chương trình trên được tuân thủ và thực thi, nó sẽ tạo ra kết quả sau:
Đầu ra
Hi
Hi
How are you ?
I am good, what about you?
I am also doing fine!
Great!
Ví dụ trên đã được thực hiện và sau đó được sửa đổi từ [https://stackoverflow.com/questions/2170520/inter-thread-communication-in-java]