Отличается ли многопоточность Java на разных ОС? - PullRequest
0 голосов
/ 06 мая 2018

Я использую Java для создания многопоточной программы, которая имитирует ресторан. Я использую новейшую Eclipse Java Oxygen для этого. Я пытался запустить его как на Windows 10, так и на Linux Mint, всегда используя Eclipse, и он хорошо работает на Windows, но когда я пытаюсь тот же проект на Linux, он останавливается. Есть ли разница между запуском многопоточной программы в Windows и Linux?

Спасибо

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Многопоточность в Java опирается на ОС для планирования собственных потоков. Встроенные планировщики потоков реализованы в ядре самой операционной системой. Это разные куски кода с разным поведением. И они также (возможно) настраиваются на системном уровне.

Да, есть различия, которые могут повлиять на способ работы Java-приложения, но было бы трудно понять, что они из себя представляют ... не говоря уже о том, чтобы описать их просто.

Возможно также, что проблема, с которой вы сталкиваетесь, связана с некоторыми другими различиями между различными платформами выполнения: существует множество возможностей. Или это может быть связано с тем, как ваше приложение взаимодействует с файловой системой, сетью или внешними приложениями, и все они имеют различия.


Я бы посоветовал вам начать с использования доступных вам средств отладки, чтобы охарактеризовать, что происходит, когда «он останавливается». Умерли ли темы? Темы заблокированы на замках? Etcetera. Затем найдите конкретные причины для конкретного поведения.

Обратите внимание, что есть две группы "классических ошибок", которые совершают люди, впервые знакомые с потоками в Java:

  1. Делать необоснованные предположения о том, как работают потоки; например что потоки запланированы справедливо, или что они будут запускаться и работать в интуитивном порядке.

  2. недостаточная синхронизация; например когда два или более потоков обращаются и / или изменяют общую переменную или структуру данных без адекватной синхронизации. (Это может привести к непредсказуемому и интуитивно понятному поведению.)

Когда все сказано и сделано, вы можете написать многопоточную Java-программу для правильной работы на многих платформах. Но мы не сможем помочь вам с конкретными проблемами, если вы четко не опишите проблему и не покажете нам соответствующий код. В таком случае настоятельно рекомендуется использовать MCVE.

0 голосов
/ 06 мая 2018

Поскольку Java создана для совместимости с перекрестной осью, в вашем коде не должно быть различий, независимо от операционной системы. Это означает, что если у вас есть приложение, которое использует несколько потоков, оно будет работать с любой ОС, пока ваше реальное приложение работает так, как вы этого хотите. Причина этого в том, что Java преобразует ваш Java-код в .java в byteCode в .class, который будет превращен в код сборки для каждой соответствующей ОС. Что-то, что может остановить вашу программу, это то, что Java устарела или не установлена ​​вообще. Если это не так, вы можете посмотреть на такие вещи, как доступность ОЗУ и любые ограничения потоков для каждой программы в Linux Mint.

...