¿Qué es el mensaje que pasa en Java? Si pudiera, por favor proporcione un ejemplo.¿Qué está pasando el mensaje?
Respuesta
Paso de Mensajes En Java
Cuando un hilo envía un mensaje (un objeto) a otro hilo.
Se utiliza para la comunicación y sincronización de subprocesos en entornos donde los subprocesos no tienen memoria compartida. Por lo tanto, los subprocesos no pueden compartir semáforos o monitores y no pueden usar variables compartidas para comunicarse. El envío de mensajes aún se puede usar, por supuesto, en una plataforma de memoria compartida.
Los mensajes se envían a través de un canal con una operación como enviar (canal, mensaje) y se reciben de un canal con una operación como recibir (canal, mensaje). Los mensajes se pueden pasar de forma síncrona, es decir, el emisor bloquea hasta que el recibido recibe una recepción y el receptor bloquea hasta que el emisor envía un mensaje. Dado que el emisor y el receptor se encuentran en puntos conocidos específicos en su código en un instante de tiempo específico conocido, el paso de mensaje síncrono también se denomina encuentro simple con un flujo de información unidireccional desde el emisor hasta el receptor. Un ejemplo es un agente de juego de ajedrez. Los agentes pueden procesar mensajes de forma síncrona, ya que serán un apretón de manos durante todo el juego.
En la transmisión de mensajes asíncrona, el emisor no bloquea. Si no hay un receptor esperando recibir el mensaje, el mensaje está en cola o almacenado. El receptor todavía bloquea si no hay un mensaje en cola o almacenado en el búfer cuando se ejecuta una recepción.
Esto realmente ayudó. ¡Gracias! – ericraio
** 1) ** Para la interacción entre subprocesos, ¿Cuándo preferir 'send()'/'receive()' sobre 'get()'/'put()' en el objeto compartido? ** 2) ** Dijo que el mensaje que pasa se puede usar en la plataforma de memoria compartida, pero [respuesta] (https://stackoverflow.com/a/1853317/3317808) dice: * los trabajadores no pueden modificar los datos de los demás. * – overexchange
Su pregunta es un poco vaga, pero supongo que podría estar refiriéndose a la API de Java Message Service? Si es así, Wikipedia puede informarle al respecto: http://en.wikipedia.org/wiki/Java_Message_Service
Pero si está hablando de mensajes más "genéricos", entonces le sugiero que eche un vistazo al enlace ewernli publicado.
Sí. Estoy pidiendo en función de los métodos de llamada en el objeto – Pavalesh
Interacción clásica entre dos hilos: un Productor y un Consumidor.
import java.util.Vector;
class Producer extends Thread {
static final int MAXQUEUE = 5;
private Vector messages = new Vector();
public void run() {
try {
while (true) {
putMessage();
sleep(1000);
}
}
catch(InterruptedException e) { }
}
private synchronized void putMessage()
throws InterruptedException {
while (messages.size() == MAXQUEUE)
wait();
messages.addElement(new java.util.Date().toString());
notify();
}
// Called by Consumer
public synchronized String getMessage()
throws InterruptedException {
notify();
while (messages.size() == 0)
wait();
String message = (String)messages.firstElement();
messages.removeElement(message);
return message;
}
}
class Consumer extends Thread {
Producer producer;
Consumer(Producer p) {
producer = p;
}
public void run() {
try {
while (true) {
String message = producer.getMessage();
System.out.println("Got message: " + message);
sleep(2000);
}
}
catch(InterruptedException e) { }
}
public static void main(String args[]) {
Producer producer = new Producer();
producer.start();
new Consumer(producer).start();
}
}
Pero aún comparte un búfer para acceder a través de la sincronización. ¿Qué tan diferente es esto de la operación 'get()' y 'put()'? – overexchange
- 1. ¿Qué se está pasando?
- 2. ¿Qué está pasando con Arc?
- 3. ¿Qué está pasando con customUserNamePasswordValidatorType?
- 4. ¿Qué está pasando con CVSNT?
- 5. haskell código mágico, ¿qué está pasando aquí?
- 6. Igualdad de cadenas: ¿Qué está pasando aquí?
- 7. ¿Qué está pasando cuando my() es condicional?
- 8. escribe declaraciones en 'donde' - ¿qué está pasando?
- 9. izip_longest en itertools: ¿Qué está pasando aquí?
- 10. Escalada de bloqueo: ¿Qué está pasando aquí?
- 11. EventHandler: ¿Qué está pasando en este código?
- 12. ¿Qué está pasando al usar DISTINCT?
- 13. show(). Parent(). Show() - ¿Qué está pasando aquí?
- 14. Python "es" declaración: ¿qué está pasando?
- 15. ¿Qué está pasando con Perl 6?
- 16. ¿Qué está pasando en el método de clasificación de ruby?
- 17. python locale error extraño. ¿Qué está pasando aquí exactamente?
- 18. '¿El usuario está escribiendo un mensaje' función ...?
- 19. iText, ¿Qué está pasando con Font, BaseFont y createFont()?
- 20. ASP .NET - ¿Qué está pasando detrás de un Eval()?
- 21. zancada y enhebrado del búfer HLSL: ¿qué está pasando aquí?
- 22. ¿Qué está pasando aquí: rspec stub (: new) .with ...?
- 23. std :: establecido rápido y lento, ¿qué está pasando?
- 24. ¿Qué está pasando con esta matriz de bytes?
- 25. Instancias de variables estáticas y AppDomains, ¿qué está pasando?
- 26. ¿Puedes explicarnos qué está pasando en este código de Ruby?
- 27. EventMachine y Ruby Threads: ¿qué está pasando realmente aquí?
- 28. ¿Qué está pasando con este código Common Lisp?
- 29. ¿Qué está pasando exactamente en las listas anidadas infinitas?
- 30. Esta función recursiva me desconcierta, ¿qué está pasando?
¿en qué contexto? – Bozho
el paso de mensajes puede referirse a varias cosas diferentes, que van desde el simple método de invocación de objetos, a la comunicación entre hilos, a la comunicación distribuida entre diferentes computadoras, ¿de qué tipo se está preguntando? – TofuBeer
¿Quiere decir "envío de mensajes" frente a "invocación de métodos"? En cuyo caso, la respuesta http://stackoverflow.com/questions/2852381/calling-a-method-or-sending-a-message-in-objective-c es buena. – ewernli