我找到了下一个代码:
public static void main(String args[]) {
Producer producer = new Producer();
producer.start();
new Consumer(producer).start();
}
}
class Producer extends Thread {
static final int MAXQUEUE = 5;
private Vector<String> messages = new Vector<String>();
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();
}
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) {
}
}
因此,我理解消息传递 - 只是不使用共享资源,并使用像上面的示例引用从一个对象到另一个对象进行通信。我对吗?
答案 0 :(得分:1)
如果您关注Publish/Subscribe pattern,那么您需要某种消息queue。生产者将消息放入队列,消费者读取队列的消息。
消息传递的要点是您的生产者/消费者不必直接引用彼此,而只是通过队列进行通信。
答案 1 :(得分:0)
为什么要自己写呢?您可以使用现有的Java消息服务(JMS)解决方案,如ActiveMQ。它可以在进程中运行并在对象之间传递消息。