基于胶囊图的Java多线程程序
我有一个基于胶囊图的java程序,其中我有3个类胶囊、端口和状态机。一个州的统计机器表示该州的nr。程序的工作原理如下 棉线:基于胶囊图的Java多线程程序,java,multithreading,uml,signals,state-machine,Java,Multithreading,Uml,Signals,State Machine,我有一个基于胶囊图的java程序,其中我有3个类胶囊、端口和状态机。一个州的统计机器表示该州的nr。程序的工作原理如下 棉线: public class SimpleCapsule { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here P
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;
}
}
公共布尔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()+" ");
}
}
}
}
公共类StateMachine1扩展线程{
公共布尔信号=假;
公共int nr,信号发送;
公共港口;
公共状态机1(内部i、内部信号号、端口p){
这是nr=i;
this.signalSend=signalNr;
这个端口=p;
}
@凌驾
public void run(){
系统输出打印项次(nr+“已启动”);
while(true){
if(this.port.getSignal()){
对于(int i=0;i您是如何检测到的,SM2
在注释上述行后没有接收信号的?只有SM1正在打印数字,但是布尔值被发送为true。但是,当我打印原始数据时,它接收到信号。为什么-1?表述错误的问题?