Будет ли значение переменной, обновленной одним потоком, в конечном итоге замечено другим потоком, если не будет синхронизировано в Java? - PullRequest
1 голос
/ 22 октября 2019

Я знаю, что если значение переменной обновляется одним потоком A, а затем читается другим потоком B, новое значение может не просматриваться потоком B, и B может получить устаревшее значение. Мой вопрос в том, что компьютеры работают очень быстро, могу ли я предположить, что эта возможная проблема с задержкой составляет порядка миллисекунд, и B в конечном итоге увидит новое значение, если мы примем шкалы времени, скажем, минут или даже часов?

Почему я спрашиваю об этом в моем коде, у меня есть карта с некоторыми записями и она работает следующим образом:

  1. пользователь добавляет запись на карту;

  2. пользователь идет делать какую-то работу;

  3. пользователь возвращается и удаляет запись;

Многие пользователи делают этоодновременно. Шаг 1 и шаг 3 очень быстрые и выполняются в одном и том же потоке (конкретный поток актера AKKA), шаг 2 занимает много времени и выполняется в отдельных рабочих потоках. Теперь, когда на шаге 2 иногда происходит сбой, шаг 3 может никогда не выполняться, и забытые записи могут накапливаться на карте, я настроил поток планировщика, чтобы проверить карту на наличие забытых записей и удалить их, чтобы избежать утечки памяти, период проверки составляет несколько часов, так каксбой происходит очень редко, при этом сценарии, практически нормально ли использовать непараллельную карту?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...