基于胶囊图的Java多线程程序

时间:2013-01-14 18:51:24

标签: java multithreading uml signals state-machine

我有一个基于胶囊图的java程序,其中我有3个类的capsule,port和state_machine。一个州的统计机构将其国家的nr称为prr。该计划的工作原理类似于this

mian:

public class SimpleCapsule {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
    Port p2=new Port(null);

    Capsule1 c1= new Capsule1(3,1, p2, null);
    Capsule1 c2= new Capsule1(2,-3, null, p2);    

    //while ( false ){
        c1.state.start();
        c2.state.start();
      //  }
   }
}

端口:

  

公共类端口{

private Port connect;
public boolean signal=true;

public Port (Port c){
    this.connect=c;
    }
 public void snedSignal(boolean b){
    if (this.connect!=null){
    this.connect.signal=b;
    } 
}
     

public boolean getSignal(){       返回这个信号;       }            }

胶囊:

 public class Capsule1 {
      public StateMachine1 state; public Port port;    

 public Capsule1 (int i, int signal, Port connecte, Port thisPort){

     if (thisPort!=null){
         this.port=thisPort;
         }else{
         port=new Port(connecte);
         }    

     state= new StateMachine1 (i,signal,this.port);
     }

 }

状态机:

public class StateMachine1 extends Thread{
    public boolean signal=false;
    public int nr, signalSend;    
    public Port port;

    public StateMachine1(int i, int signalNr, Port p){
        this.nr=i;        
        this.signalSend=signalNr;
        this.port=p;
    }    


    @Override
    public void run(){        
        System.out.println(nr+"started");
    while (true){
        if (this.port.getSignal()){
            for (int i=0; i<this.nr;i++){                
                System.out.println(nr+"th: "+i+" sS");                                            
                    if (signalSend==i){
                        port.snedSignal(true);                            
                    }else{
                        port.snedSignal(false);                        
                    }   
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    Logger.getLogger(StateMachine1.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        }else{
            System.out.print(nr+"TH-"+this.port.getSignal()+" ");                    
        }
    }
    }
}

像这样程序运行良好,但如果你评论状态机类的最后一个原始文件:System.out.print(nr+"TH-"+this.port.getSignal()+" ");而不是第二个状态机 SM2 在第3或第4个信号之后没有收到开始。

有什么问题?我在这个信令过程中哪里犯了错误?

0 个答案:

没有答案