Чтение из хеш-таблицы во время обновления не является потокобезопасным.
А, я понимаю, что вы имеете в виду, должны ли мы вместо этого переместить вызов @lock.synchronise
в get
?
Я не уверен, что после этого он нам понадобится в set
?
Вам это нужно в обоих методах, потому что вы читаете и записываете в @constants
. У вас не может быть синхронизированного доступа к одной и той же хэш-таблице ни в каких ситуациях. Операции только для чтения небезопасны при одновременной записи.
Хорошо, я объединил изменение, чтобы обернуть @constants
в синхронизацию.
Спасибо @ioquatix за вдохновение!