anchor.diff:  
   *Mutual exclusion* - `synchronized` создает критическую секцию и гарантирует взаимное исключение.
   
  -=== *Что такое ordering, visibility, atomicity, happend-before, mutual exclusion на примере AtomicInteger?*
  +=== Что такое ordering, visibility, atomicity, happend-before, mutual exclusion на примере AtomicInteger?
   
   У `AtomicInteger` такие же гарантии на ordering, visibility и happens-before, как и у volatile, потому что поле `value` внутри него объявлено как volatile.
   
  
positive.code: * Рекомендуется для использования разработчиками Java, в то время как
  `Timer` считается устаревшим и используется только до Java 5.
  
  === *Говорят, что Future/CompletableFuture — это монада. Что скажете?*
  
  Если упростить до невозможности, то монада - это структура, позволяющая представить значение в контексте выполнения операции. То есть вместо того, чтобы работать с реальным значением, мы можем представить его контейнером и дальше оперировать контейнером как заместителем реального значения. У контейнера есть операции создания и преобразования в контейнер с другим содержимым. Это позволяет программисту  в некоторых местах сильно упростить код, когда его не интересуют промежуточное состояние. Он может работать с монадой как с реальным значением, не имея его представления. `Future` не является классической монадой, так как не позволяет преобразовывать себя в другие обещания выполнения. Можно только параметризировать `Future` типом и создать его (например, через `FutureTask`). В свою очередь `CompletableFuture` позволяет преобразовывать одни обещания выполнения в другие.
  
  === *В чем преимущество ForkJoinPool над ThreadPoolExecutor?*
  
  `ForkJoinPool` хорошо работает в случаях, когда задачи могут разделяться на подзадачи. Он использует work-stealing алгоритм, который позволяем потокам "красть" задачи, созданные в других потоках. `ThreadPoolExecutor` этого делать не может. Если задаче нужно себя разбить, то все её подзадачи будут выполняться в том же потоке последовательно, что может привести к нежелаемой ситуации, когда некоторые потоки работают активно, а другие простаивают без работы. 
  
  === *Какая функциональность появилась у ScheduledThreadPool в сравнении с ThreadPoolExecutor?*
  
  `ScheduledThreadPoolExecutor` позволяет запускать задачи по интервалу или с задержкой. С помощью методов `scheduleAtFixedRate` или `scheduleWithFixedDelay` можно запускать перодические задачи. `ThreadPoolExecutor` запускает задачи сразу как они доступны в очереди.
  
  === *В чем отличие методов sheduleAtFixedRate() от sheduleAtFixedDelay() класса SheduledThreadPool?*
  
  `sheduleAtFixedRate` не учитывает длину выполнения задачи и просто запускает задачи по интервалу. В то же время `sheduleAtFixedDelay` считает интервал ожидания после окончания выполнения задачи. То есть в первом случае мы имеем фиксированный интервал запуска задач, а во втором фиксированный интервал задержки между задачами.
  
  
negative.code: 
  Одноядерные процессоры относятся к SISD системам, многоядерные процессоры к SIMD или MIMD. GPU является SIMD системой, потому что использует векторные инструкции для операций над мультимедиа-данными.
  
  === Расскажите про иерархию кэшей L1/L2/L3? Что вызвало ее появление*
  
  L1/L2/L3 - кэши данных, которыми оперирует процессор.
  
  