[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-reactive-obyasnite-raznitsu-mezhdu-hot-i-cold-observable":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},990,"obyasnite-raznitsu-mezhdu-hot-i-cold-observable",31,"reactive","Reactive","⚡","Объясните разницу между Hot и Cold Observable","Cold Observable начинает эмитировать данные только после подписки; каждый подписчик получает полную последовательность с начала. Hot Observable эмитирует данные независимо от наличия подписчиков; новый подписчик получает только данные, отправленные после его подписки.\n\n### Cold Observable\n\nХарактеристики:\n- Ленивое исполнение (Lazy Evaluation) — данные не производятся без подписчика\n- Множественные подписки — каждый подписчик получает полную последовательность независимо\n- Воспроизводимость — каждый подписчик видит одну и ту же последовательность с начала\n\n```java\nFlux\u003CString> coldFlux = Flux.just(\"A\", \"B\", \"C\", \"D\")\n        .doOnSubscribe(s -> System.out.println(\"Subscribed to Cold Observable\"));\n\ncoldFlux.subscribe(item -> System.out.println(\"Subscriber 1: \" + item));\ncoldFlux.subscribe(item -> System.out.println(\"Subscriber 2: \" + item));\n\u002F\u002F Оба подписчика получат A, B, C, D\n```\n\n### Hot Observable\n\nХарактеристики:\n- Жадное исполнение (Eager Evaluation) — публикация начинается сразу, даже без подписчиков\n- Общий поток данных — все подписчики используют один источник\n- Невоспроизводимость — подписчики видят разные части последовательности\n\n\u003Cdetails>\u003Csummary>Пример Hot Observable\u003C\u002Fsummary>\n\n```java\nimport reactor.core.publisher.Flux;\nimport reactor.core.publisher.ConnectableFlux;\nimport java.time.Duration;\n\npublic class HotObservableExample {\n\n    public static void main(String[] args) throws InterruptedException {\n        ConnectableFlux\u003CString> hotFlux = Flux.just(\"A\", \"B\", \"C\", \"D\")\n                                              .delayElements(Duration.ofMillis(500))\n                                              .publish();\n\n        hotFlux.connect(); \u002F\u002F Запускаем публикацию\n\n        hotFlux.subscribe(item -> System.out.println(\"Subscriber 1: \" + item));\n        Thread.sleep(750);\n\n        \u002F\u002F Второй подписчик пропустит первый элемент\n        hotFlux.subscribe(item -> System.out.println(\"Subscriber 2: \" + item));\n\n        Thread.sleep(2000);\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Ключевые отличия\n\n| Критерий | Hot Observable | Cold Observable |\n|----------|---------------|-----------------|\n| Обмен данными | Один поток для всех подписчиков | У каждого подписчика свой поток |\n| Время подписки | Данные зависят от момента подписки | Все данные доступны любому подписчику |\n| Жизненный цикл | Работает независимо от подписок | Запускается только при подписке |\n| Асинхронность | Генерирует данные без подписчиков | Передача начинается после подписки |\n\n### Практическое применение\n\nCold Observable:\n- Чтение из файла, HTTP-запрос, генерация последовательности\n- Сценарии, где каждый подписчик должен получить полные данные\n\nHot Observable:\n- События мыши, обновления цен на акции, данные датчиков\n- Сценарии, где важны только текущие и будущие события\n\n> **На собеседовании:** хороший маркер знаний — привести примеры из реальных проектов. Cold: HTTP-запрос (каждый subscribe делает новый запрос). Hot: WebSocket-соединение, Kafka-топик. Частая ошибка — не упомянуть ConnectableFlux как способ превращения Cold в Hot.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Объясните разницу между Hot и Cold Observable — Gymterview","Cold Observable начинает эмитировать данные только после подписки; каждый подписчик получает полную последовательность с начала. Hot Observable эмитирует данные","Cold Observable начинает эмитировать данные только после подписки; каждый подписчик получает полную последовательность с",[7,13],"Cold Observable начинает эмитировать данные только после подписки; каждый подписчик получает полную последовательность с начала. Hot Observable эмитирует данные независимо от наличия подписчиков; новый подписчик получает только данные, отправленные после его подписки.",true]