消息在Java中传递通道,发送,接收

时间:2014-05-04 16:49:06

标签: java channel message-passing

我正在使用JMP库(http://ants.inf.um.es/staff/jlaguna/jmp/javadoc/),我想知道如何创建两个打印Char的线程并等待另一个打印他(通过向他发送一个消息)。

结果应该是这样的:

Main(){
ThreadB();
ThreadC();
}

Output:
B
C
B
C
... 

这就是我所做的:

import messagepassing.Channel;

public class Main3 {

    static Channel canalBC = new Channel();
    static Channel canalCB = new Channel();


    public static void procesoB(final Channel canalBC, final Channel canalCB){
        Thread thCliente = new Thread(new Runnable () {
             @Override public void run (){
                for(int i=0;i<=5;i++){
                canalCB.receive();  
                System.out.println("B");
                canalBC.send(1);
                }
          }
         } , "A");
         thCliente.start();
    }
    public static void procesoC(final Channel canalBC, final Channel canalCB){
        Thread thCliente = new Thread(new Runnable () {
             @Override public void run (){
                for(int i=0;i<=5;i++){
                canalBC.receive();
                System.out.println("C");
                canalCB.send(1);
                }
          }
         } , "A");
         thCliente.start();
    }
    public static void main(String[] args) {
            canalCB.send(1);// Printing the first B
        procesoB(canalBC,canalCB);
        procesoC(canalBC,canalCB);
    }
}

但它没有用。

1 个答案:

答案 0 :(得分:0)

两个进程首先尝试接收,然后发送,这会导致死锁。 在其中一个过程中交换发送和接收的顺序。