У меня есть объект, который содержит некоторые примитивные переменныебезопасность потоков Java и примитивы
public class Myobject {
public final double d
public long a
}
все эти объекты будут храниться в наборе, который не синхронизирован
private Set<Myobject> myset = new HashSet<>()
теперь я хочу, чтобы передать эти объекты в другой поток и выполнить некоторые вычисления. в этом потоке я буду читать только переменные «d» и «a», varibales никогда не будет изменен мой вопрос в том, является ли потокобезопасным создание немодифицируемого набора Collections.unmodifiableset (myset); и передать его ко второй резьбе.
За исключением особых случаев, безопасность потоков является проблемой только в том случае, если вы хотите что-то изменить во время использования в нескольких потоках. – immibis
Ну, в чем вас беспокоит? Если переменные никогда не будут изменены, есть ли причина, по которой '' 'не' final'? Вы переопределяете 'equals' и' hashCode'? Я бы настоятельно рекомендовал * не * сделать поля общедоступными, кстати. –
Это безопасно, если вы запустите другой поток (вызовите 'Thread.start()') из того же потока, который инициализировал набор объектов после их инициализации (так как вызов 'Thread.start()' имеет отношение before-before с первой инструкцией запуска потока) –