Всем доброго времени суток. Вопрос заключается в следующем: почему при объявлении в классе
private static Random random = ThreadLocalRandom.current();
в методе следующего вида
public static double getPositiveDoubleRandomValue(double first, double second) {
return random.nextDouble(first, second);
}
компилятор не предлагает использовать метод nextDouble(double, double), а единственно возможный вариант для использования - nextDouble()? Но в то же время, если реализацию метода изменить на
public static double getPositiveDoubleRandomValue(double first, double second) {
return ThreadLocalRandom.current().nextDouble(first, second);
}
то все нормально работает. Спасибо!
В данном случае статическое поле Random random
Инициализируется один раз каким-то потоком и все потоки которые будут далее обращаться к нему через метод getPositiveDoubleRandomValue
будут использовать именно этот экземпляр объекта. В то время как идея ThreadLocal
заключается в том что у каждого потока будет своя копия объекта Random
и чтобы несколько потоков одновременно не полезли в один и тот же Random
.
Во втором же варианте, поток, зайдя в метод, запросит свою копию Random
, что позволит не допустить одновременного доступа двух потоко к одному объекту.
Intellij предупреждает вас что код получается не "Thread safe". Читайте "Не безопасным" и возможны очень странные ошибки и непредсказуемое поведение, если не исправить.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
В документации к класу Scanner написано, что tokens() возвращает стрим стрингов, таких же которые возвращал бы метод next()
Прошу подсказать, как можно обыграть такую ситуацию с break:
Как убрать фон кнопки так, чтобы осталось только одно изображение? Сама иконка 16x16