2013-09-05 11 views
5

Gdybym zadzwonićWysyłanie wiadomości od nie-aktorów w Akce

actorRef.tell("MSG", null); 

z nie-aktora

Czy nadal wątku bezpieczne? A asynchronicznie jak w zakończeniu natychmiast?

Wiadomość jest niezmienna.

Zasadniczo mój kod to:

class NonActor { 
    .... 

    public void tellTest() { 

     actorRef.tell("MSG", null); 
    } 
} 
+0

Jaki jest twój kod? – gparyani

Odpowiedz

5

Zasadniczo actorRef.tell("MSG", null); tworzy rekord jak

(actorRef, Envelope(msg, sender)) 

i umieścić go w kolejce komunikatów ActorSystem „s. Zatem tell nie jest w żaden sposób powiązany z aktorem. Sama metoda tell jest niewątpliwie wątkowo bezpieczna.

+0

To były moje przemyślenia na temat jego pracy, i rzeczywiście jest. Znaleziono w dokumentach i potwierdzone kilka dni temu. – BAR

1

Czy jest to bezpieczny wątku zależy od pozostałej części aplikacji. Aktorzy nie są z natury bezpieczni dla wątków; możesz udostępniać zmienny stan tak, jak mógłbyś w przypadku dowolnej jednostki aplikacji. Jednak wywołanie tell powróci natychmiast, ponieważ jest asynchroniczne.

+0

Czy masz na myśli zależność od samego msg? O ile jest niezmienny? – BAR

+0

Tak długo jak msg jest niezmienny, a aktor nie korzysta z żadnego współdzielonego stanu zmiennego. –

0

Nero jako nadawca oznacza, że ​​aktor odbierający nie może wykonać nadawcy(). Tell(), aby odebrać wiadomość.

Powiązane problemy