Mam wątek, A
, który ma listę. Lista zawiera niektóre obiekty. Teraz chcę zaprojektować mechanisim, za pomocą którego mogę wysłać wiadomość do wątku A
.Komunikacja między dwoma wątkami
działa w pętli (nie czeka ani nie zasypia). Inny wątek, B
, wysyła wiadomość do wątku A
, a wątek A
opróżnia wszystkie jego kolejki.
Jak mogę wysyłać wiadomości między wątkami?
class A extends Thread {
List<Object> objs = something; //Init it
void run() {
while(true) {
//Body which works on objects.
//After receiving an external message, "A" should perform some action, for example, empty objects.
}
}
}
EDYCJA: Czy mogę zrobić to w ten sposób?
class A extends Thread {
List<Object> objs = something; //Init it
Boolean flag = false;
public void setFlag(boolean value) {
synchronized(flag) {
this.flag = value;
}
}
public void getFlag() {
synchronized(flag) {
return this.flag;
}
}
void run() {
while(true) {
//Body which works on objects.
//After receiving an external message, A should perform some action, for example, empty objects.
if (getFlag == true)
//Empty list
}
}
}
W Javie zazwyczaj nie wysyła się wiadomości między wątkami, ale do synchronizowania obiektów między wątkami używa się obiektów zsynchronizowanych. – toto2
I zsynchronizowane zmienne instancji, jak meto w mojej nowej edycji, będzie działać? – akshay
@akshay Edycja wygląda OK (poza tym, że chodziło o 'if (getFlag() == true)'). – toto2