什么是消息传递?

时间:2010-07-11 08:26:48

标签: java

什么是Java中的消息传递?如果可以的话,请举例说明。

3 个答案:

答案 0 :(得分:17)

在Java中传递消息

  • 当线程将消息(对象)发送到另一个线程时。

  • 用于线程没有共享内存的环境中的线程通信和同步因此,线程无法共享信号量或监视器,也无法使用共享变量进行通信。当然,仍然可以在共享内存平台中使用消息传递。

  • 通过具有发送(频道,消息)等操作的信道发送消息,并通过接收(频道,消息)等操作从频道接收消息。消息可以同步传递,这意味着发送方阻塞,直到接收到接收,接收方阻塞,直到发送方发送。由于发送方和接收方在已知的特定时刻在其代码中处于特定的已知点,因此同步消息传递也称为简单的会合,其具有从发送方到接收方的单向信息流。一个例子是国际象棋游戏代理。代理可以同步处理消息,因为它们将在整个游戏中进行握手。

  • 在异步消息传递中,发件人不会阻止。如果没有接收方等待接收消息,则消息排队或缓冲。如果在执行接收时没有排队或缓冲的消息,接收器仍会阻塞。

答案 1 :(得分:12)

两个线程之间的经典交互:生产者和消费者。

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(); 
    } 
} 

答案 2 :(得分:-1)

你的问题有点模糊,但我猜你可能指的是Java Message Service API?如果是这样,维基百科可以告诉你一切:http://en.wikipedia.org/wiki/Java_Message_Service

但如果您正在谈论更多“通用”消息传递,那么我建议您查看ewernli发布的链接!