2014-05-04 96 views
0

我正在使用JMP庫(http://ants.inf.um.es/staff/jlaguna/jmp/javadoc/),並且我想知道如何創建2個線程來打印一個字符並等待其他字符(通過發送給他一個字符MSG)。消息在Java中使用通道傳遞,發送,接收

結果應該是這樣的:

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

該API使用西班牙文... –

回答

0

這兩個進程試圖先接收,然後發送,這導致了死鎖。 在其中一個進程中交換髮送和接收的順序。