La grande majorité des codeurs JMRI (et programmeurs) n'ont pas à se soucier des liaisons. Leur code se trouve invoqué, et appelle un autre code, et la laison prend soin d'elle-même. Cela est particulièrement vrai pour le code basé sur les événements, qui répond à des événements provenant par exemple de l'interface graphique ou du changement d'un objet sur le réseau, et appelle des méthodes concernant d'autres objets, qui peuvent à leurs tours créer plus d'événements.
Cette simplicité vient de l'utilisation d'un seul lien pour le traitement de la plupart de l'activité de JMRI: Le fil des événements Java Swing.
Notez que ceci ne signifie pas que d'autres choses ne peuvent pas survenir. Par exemple, ce fragment de script:
    state = sensors.provideSensor("mySensor").getState()
    turnouts.provideTurnout("myTurnout").setState(THROWN)
    print state == sensors.provideSensor("mySensor").getState()
  
peut imprimer soit vrai ou faux, parce que car la modification de l'aiguillage peut changer instantanément les capteurs associés.
Il y a des moments où vous pouvez vouloir faire des choses un peu plus complexes avec l'utilisation d'un lien supplémentaire:
Par exemple, si vous voulez lire un tas de données venant d'un fichier, passer quelque temps à le modifier, et puis créer une fenêtre pour le montrer, vous pouvez vouloir faire tout ce travail sur un lien séparé. À la fin, quand il est temps de rendre visible votre travail, vous devez le faire sur le lien Swing ( GUI ). Voici le code pour le faire:
    frame = new JmriJFrame();  // frame declared as instance variable
    // spend a long time reading data and configuring the frame
    ThreadingUtil.runOnGUI( ()->{  frame.setVisible(); });
 
ThreadingUtil sépare les opérations sur le lien GUI ( par ex Java Swing )  et les opérations 
sur le réseau ( ex: Capteurs, Aiguillages, etc ). Il n'y a pas de vrai différence maintenant,
mais dans l'interêt peut-être d'avoir besoin un jour de les séparer, nous introduisons maintenant 
les deux versions. SVP essayez de choisir la bonne la plupart du temps l'une lors du codage.
( N.B: Vous trouverez beaucoup de cas plus anciens qui utilisent explicitement javax.swing.SwingUtilities.invokeLater( r ) ou javax.swing.SwingUtilities.invokeAndWait( r ); Ceux-ci seront migrés vers les nouvelles méthodes spécifiques JMRI à l'avenir pour garder notre code juste un petit peu plus propre et plus souple.)