Java 什么是消息传递?
Java中的消息传递是什么?如果可以,请提供一个示例。您的问题有点模糊,但我猜您可能指的是Java消息服务API?如果是这样,维基百科可以告诉你一切:Java 什么是消息传递?,java,Java,Java中的消息传递是什么?如果可以,请提供一个示例。您的问题有点模糊,但我猜您可能指的是Java消息服务API?如果是这样,维基百科可以告诉你一切: 但是如果你说的是更“通用”的消息传递,那么我建议你看看ewernli发布的链接 Java中的消息传递 当一个线程向另一个线程发送消息(对象)时 用于线程没有共享内存的环境中的线程通信和同步,因此线程不能共享信号量或监视器,也不能使用共享变量进行通信。当然,消息传递仍然可以在共享内存平台中使用 消息通过发送(通道,消息)等操作的通道发送,从接收(
但是如果你说的是更“通用”的消息传递,那么我建议你看看ewernli发布的链接 Java中的消息传递
- 当一个线程向另一个线程发送消息(对象)时
- 用于线程没有共享内存的环境中的线程通信和同步,因此线程不能共享信号量或监视器,也不能使用共享变量进行通信。当然,消息传递仍然可以在共享内存平台中使用
- 消息通过发送(通道,消息)等操作的通道发送,从接收(通道,消息)等操作的通道接收。消息可以同步传递,这意味着发送方阻止直到接收方进行接收,接收方阻止直到发送方进行发送。由于发送方和接收方在已知的特定时刻处于其代码中的特定已知点,因此同步消息传递也被称为简单会合,具有从发送方到接收方的单向信息流。一个例子是国际象棋游戏代理。代理可以同步处理消息,因为他们将在整个游戏中握手
- 在异步消息传递中,发送方不阻塞。如果没有接收器等待接收消息,则消息将排队或缓冲。如果在执行接收时没有排队或缓冲消息,则接收器仍会阻塞
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();
}
}
消息传递可以指几种不同的事情,从简单地调用对象上的方法,到线程之间的通信,再到不同计算机之间的分布式通信——您想知道哪种类型?您是指“消息发送”还是“方法调用”?在这种情况下,答案是好的。我是基于调用object上的方法来请求的,但您仍然共享一个缓冲区来通过同步进行访问。对于线程之间的交互,这与
get()
和put()
操作有多大不同?1)在共享对象上,何时更喜欢send()
/receive()
而不是get()
/put()
?2) 您说过消息传递可以在共享内存平台中使用,但表示工作人员不能修改彼此的数据。