Многопоточность в Java опирается на ОС для планирования собственных потоков. Встроенные планировщики потоков реализованы в ядре самой операционной системой. Это разные куски кода с разным поведением. И они также (возможно) настраиваются на системном уровне.
Да, есть различия, которые могут повлиять на способ работы Java-приложения, но было бы трудно понять, что они из себя представляют ... не говоря уже о том, чтобы описать их просто.
Возможно также, что проблема, с которой вы сталкиваетесь, связана с некоторыми другими различиями между различными платформами выполнения: существует множество возможностей. Или это может быть связано с тем, как ваше приложение взаимодействует с файловой системой, сетью или внешними приложениями, и все они имеют различия.
Я бы посоветовал вам начать с использования доступных вам средств отладки, чтобы охарактеризовать, что происходит, когда «он останавливается». Умерли ли темы? Темы заблокированы на замках? Etcetera. Затем найдите конкретные причины для конкретного поведения.
Обратите внимание, что есть две группы "классических ошибок", которые совершают люди, впервые знакомые с потоками в Java:
Делать необоснованные предположения о том, как работают потоки; например что потоки запланированы справедливо, или что они будут запускаться и работать в интуитивном порядке.
недостаточная синхронизация; например когда два или более потоков обращаются и / или изменяют общую переменную или структуру данных без адекватной синхронизации. (Это может привести к непредсказуемому и интуитивно понятному поведению.)
Когда все сказано и сделано, вы можете написать многопоточную Java-программу для правильной работы на многих платформах. Но мы не сможем помочь вам с конкретными проблемами, если вы четко не опишите проблему и не покажете нам соответствующий код. В таком случае настоятельно рекомендуется использовать MCVE.