| 
 | 
| 
 
Использование value based классов в качестве объекта синхронизации 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  В описании класса  Class Optional<T>  сказано: Код: java 1. В 25 пункте туторала 26 Reasons Why Using Optional Correctly Is Not Optional приведен код: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Несколько вопросов: 1). Почему операция == для объектов класса Optional может привести к непредсказуемым результатам? С equals и hashcode понятно, их можно переопределить по хранящемуся значению в них, но ссылки то на объекты в моем понимании фиксированные. 2). Отсюда второй вопрос, почему мы не можем использовать объекты класса Optional в качестве объекта синхронизации? На сколько я знаю у каждого объекта или класса есть свой монитор (возможно скрытое поле или какой то другой механизм, точно не знаю), и он однозначно привязан к этому объекту или классу. так если посмотреть на код: Код: java 1. 2. 3. 4. 5. первое сравнение всегда будет возвращать false ? А второе зависит от хранимых в объектах op1 и op2 значений ? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 11.03.2020, 12:17 | 
  
  
  
   | 
||
| 
 
Использование value based классов в качестве объекта синхронизации 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  У меня единственная догадка, что это как то связано с оптимизацией кода, возможно при компиляции может произойти замена одного объекта на другой, если компилятор посчитает их одинаковыми. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 11.03.2020, 12:30 | 
  
  
  
   | 
||
| 
 
Использование value based классов в качестве объекта синхронизации 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  faustgreen У меня единственная догадка, что это как то связано с оптимизацией кода, возможно при компиляции может произойти замена одного объекта на другой, если компилятор посчитает их одинаковыми. имхо, больше это связано с общей логикой. 1) == как операция не применима к значениям, и значит, не должна применяться к value type Не имеет значения результат операции, смысл которой не определен для данного случая. аналогично 2) - синхронизироваться имеет смысл только на изменяемых объектах В обоих случаях компилятору было бы хорошо выдавать ошибки времени компиляции о недопустимом использовании операции. Но пока пользуйтесь правилом большого пальца. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 11.03.2020, 14:47 | 
  
  
  
   | 
||
| 
 
Использование value based классов в качестве объекта синхронизации 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  на первый вопрос я думаю ответ простой это два разных объекта,почему у них должны быть одинаковые ссылки если ты сделаешь вот так Код: java 1. 2. 3. ссылки будут раны а когда ты делаешь Код: java 1. 2. это два разных объекта,хотя их содержимое эквивалентно тоже самое ты получишь и тут Код: java 1. 2. 3. FALSE ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 11.03.2020, 19:58 | 
  
  
  
   | 
||
| 
 
Использование value based классов в качестве объекта синхронизации 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  faustgreen почему мы не можем использовать объекты класса Optional в качестве объекта синхронизации? 1. java.util.Optional#ofNullable может вернуть синглетон java.util.Optional#EMPTY, т.е. мы можем в коде, сами того не осознавая, получить кучу одинаковых мониторов 2. java.util.Optional immutable, в нем менять нечего, смысла в мониторе нет ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.03.2020, 09:26 | 
  
  
  
   | 
||
| 
 
Использование value based классов в качестве объекта синхронизации 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  faustgreen, Optional - это тип-обёртка. И тебе надо синхронизироваться не с обёрткой а с содержанием. Так будет правильно. Кроме того назначение Optional - это быть типом-контейнером. Переносить другие объекты. И если внутри Optional лежит константа EMPTY - тогда вся логика синхронизации ломается и ломается полиморфизм. Уже нельзя синхронизироваться без условия. Это осложняет смысл. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.03.2020, 12:00 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?desktop=1&fid=59&tid=2120877]:  | 
    0ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    13ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    40ms | 
get topic data:  | 
    11ms | 
get forum data:  | 
    2ms | 
get page messages:  | 
    43ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 240ms | 
| total: | 368ms | 

| 0 / 0 | 

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.