1. Вот есть стандартное решение — типа как в С++. Вы запускаете поток и как бы просто исполнение раздвоилось. Теперь нужно помнить, что к одной и той же переменной могут одновременно получит доступ два разных потока — как-то синхронизировать эти доступы, учитывать это.
У меня на адаптацию мозга к пониманию многопоточности ушло несколько месяцев. Поначалу я не знал как это вообще возможно представить — ведь поток мыслей у меня один, а программа может исполняться не только в два потока но поболее...
2. А ведь есть и иные решения — типа как в Dart. Доступ к переменным всегда из одного потока — нет возможности раздвоить как в C++. Т.е. ты можешь не беспокоиться о том, что кто-то левый изменит переменную и произойдет конфликт. 100% гарантия безопасности.
Если же вам в этом подходе захотелось запустить отдельный поток — то он имеет все свои значения переменных, включая статические. Т.е. с первым потоком оно никак не соотносится. По сути как будто запустился второй экземпляр программы. Общение между ними — через спец. механизм — как будто вы общаетесь с удаленным сервером.
Подход 2 — не требует адаптации мозга и воспринимается интуитивно. Но тоже есть беда — некоторые вещи допустимы только из основного потока. В таком случае вам нужно делать некий спец. вызов — перегонку туда-обратно чисто из-за данной специфики
Какой подход вам кажется более удобным и почему?