# Managing multiple asynchronous threads

**URL:** <https://forum.inductiveautomation.com/t/managing-multiple-asynchronous-threads/37185>\
**Category:** Ignition\
**Created:** [July 29, 2020, 1:50pm UTC](https://forum.inductiveautomation.com/t/managing-multiple-asynchronous-threads/37185 "2020-07-29T13:50:58Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [July 29, 2020, 2:17pm UTC](https://forum.inductiveautomation.com/t/managing-multiple-asynchronous-threads/37185/2 "2020-07-29T14:17:41Z")

</div>

To manage long-running jython threads through scripting restarts, you need to:

1. Place the thread object in a dictionary that retains its content through script restarts. I used to recommend the dictionary from system.util.getGlobals(), but that is no longer suitable. I created a free [Life Cycle Module](http://forum.inductiveautomation.com/t/system-util-getglobals-not-persisted-across-designer-save/33869/14) that provides such dictionaries going forward.

2. Write the asynchronous function’s loop so that it regularly checks [Thread.interrupted()](https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#interrupted--), particularly after any java I/O operations. Clean up and return when true.

3. Write the asynchronous function’s startup section to grab the persistent dictionary, look up any thread already on its own key, and if present, `.interrupt()` and `join()` it. Then place the function’s own thread, `Thread.currentThread()`, into the persistent dictionary in that same key. Then proceed with the rest of your startup logic (including picking up any saved state from a prior thread’s cleanup).

---

_[View the full topic](https://forum.inductiveautomation.com/t/managing-multiple-asynchronous-threads/37185)._
