{"id":19514610,"url":"https://github.com/jcoderpaul/javaextended-25","last_synced_at":"2026-06-13T08:32:37.772Z","repository":{"id":62370910,"uuid":"559969218","full_name":"JcoderPaul/JavaExtended-25","owner":"JcoderPaul","description":"Multithreading. Synchronized methods, blocks, сollection. Section cheat sheet. For memory!","archived":false,"fork":false,"pushed_at":"2025-10-18T03:24:05.000Z","size":456,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-19T02:18:15.219Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JcoderPaul.png","metadata":{"files":{"readme":"ReadMe.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-10-31T13:30:47.000Z","updated_at":"2025-10-18T03:24:09.000Z","dependencies_parsed_at":"2023-01-27T21:30:48.077Z","dependency_job_id":null,"html_url":"https://github.com/JcoderPaul/JavaExtended-25","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JcoderPaul/JavaExtended-25","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JcoderPaul%2FJavaExtended-25","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JcoderPaul%2FJavaExtended-25/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JcoderPaul%2FJavaExtended-25/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JcoderPaul%2FJavaExtended-25/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JcoderPaul","download_url":"https://codeload.github.com/JcoderPaul/JavaExtended-25/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JcoderPaul%2FJavaExtended-25/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34278153,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T23:37:01.018Z","updated_at":"2026-06-13T08:32:37.767Z","avatar_url":"https://github.com/JcoderPaul.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Многопоточность - Multithreading\n\nБольшинство языков программирования поддерживают такую важную функциональность как многопоточность, \nи Java в этом плане не исключение. При помощи многопоточности мы можем выделить в приложении несколько \nпотоков, которые будут выполнять различные задачи одновременно. Если у нас, допустим, графическое \nприложение, которое посылает запрос к какому-нибудь серверу или считывает и обрабатывает огромный \nфайл, то без многопоточности у нас бы блокировался графический интерфейс на время выполнения задачи. \nА благодаря потокам мы можем выделить отправку запроса или любую другую задачу, которая может долго \nобрабатываться, в отдельный поток. \n\nПоэтому большинство реальных приложений, которые многим из нас приходится использовать, практически \nне мыслимы без многопоточности.\n\nМногопоточность решает две основные задачи:\n1. Многопоточность позволяет одновременно выполнять несколько действий;\nПример из обычной жизни: Не только жена (один поток) моет посуду, ходит в магазин, стирает вещи, но в \nработе участвуют муж и дети (еще n-потоков).\n\nПример из жизни IT специалиста: У нас есть программа с пользовательским интерфейсом. При нажатии кнопки \n«Продолжить» внутри программы должны произойти какие-то вычисления, а пользователь должен увидеть следующий \nэкран интерфейса. Если эти действия осуществляются последовательно, после нажатия кнопки «Продолжить» \nпрограмма просто зависнет. Пользователь будет видеть все тот же экран с кнопкой «Продолжить», пока все \nвнутренние вычисления не будут выполнены, и программа не дойдет до части, где начнется отрисовка интерфейса.\nИ вот тут все начинают нервничать... долго ... что-то!\n\nИ тогда на ум приходит, аналогия из жизни: длинная вереница машин на однорядном мосту (жаль, что он не многорядный).\n\nИ программист решает переделать программу, и «распараллелить» процессы. \nПусть нужные вычисления выполняются в одном потоке, а отрисовка интерфейса — в другом. У большинства компьютеров \nхватит на это ресурсов. В таком случае программа не будет «подвисать», и пользователь будет спокойно переходить \nмежду экранами интерфейса не заботясь о том, что происходит внутри.\n\n2. Многопоточность позволяет ускорить вычисления;\nЕсли наш процессор имеет несколько ядер, а большинство процессоров сейчас многоядерные, список наших задач могут \nпараллельно решать несколько ядер. Очевидно, что если нам нужно решить 1000 задач и каждая из них решается за \nсекунду, одно ядро справится со списком за 1000 секунд, два ядра — за 500 секунд, три — за 333.3... и так далее.\n\nОднако, современные системы очень умны, и даже на одном вычислительном ядре они способны реализовать \nпараллельность, или псевдопараллельность, когда задачи выполняются попеременно.\n\nГлавный класс в библиотеке Java, относящийся к многопоточности находится в java.lang.Thread.\nСобственно говоря, потоки в Java представляются экземплярами класса Thread.\n\n---\n### Класс Thread\nВ Java функциональность отдельного потока заключается в классе Thread. И чтобы создать новый поток, \nнам надо создать объект этого класса. Но все потоки не создаются сами по себе. Когда запускается \nпрограмма, начинает работать главный поток этой программы. От этого главного потока порождаются \nвсе остальные дочерние потоки. \n\n---\nПо умолчанию именем главного потока будет main.\nДля управления потоком класс Thread предоставляет ряд методов. Наиболее используемые из них:\n- getName(): возвращает имя потока;\n- setName(String name): устанавливает имя потока;\n- getPriority(): возвращает приоритет потока;\n- setPriority(int proirity): устанавливает приоритет потока. Приоритет является одним из ключевых \n  факторов для выбора системой потока из кучи потоков для выполнения. В этот метод в качестве параметра \n  передается числовое значение приоритета - от 1 до 10. По умолчанию главному потоку выставляется \n  средний приоритет - 5;\n- isAlive(): возвращает true, если поток активен;\n- isInterrupted(): возвращает true, если поток был прерван;\n- join(): ожидает завершение потока;\n- run(): определяет точку входа в поток;\n- sleep(): приостанавливает поток на заданное количество миллисекунд;\n- start(): запускает поток, вызывая его метод run();\n\n---\nВ примерах напоминалках рассмотрены:\n- [Less_25_ch_1_ClassThread](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_1_ClassThread/src/Less_25_ch_1_ClassThread)\n- [Less_25_ch_2_InterfaceRunnable](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_2_InterfaceRunnable/src/Less_25_ch_2_InterfaceRunnable)\n- [Less_25_ch_3_ThreadNamePriority](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_3_ThreadNamePriority/src/Less_25_ch_3_ThreadNamePriority)\n- [Less_25_ch_4_SleepJoinThread](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_4_SleepJoinThread/src/Less_25_ch_4_SleepJoin)\n- [Less_25_ch_5_Volatile](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_5_Volatile/src/Less_25_ch_5_Volatile)\n- [Less_25_ch_6_SynchronizedMethods](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_6_SynchronizedMethods/src/Less_25_ch_6_SynchronizedMethods)\n- [Less_25_ch_7_SynchronizedBlocks](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_7_SynchronizedBlocks/src/Less_25_ch_7_SynchronizedBlocks)\n- [Less_25_ch_8_WaitAndNotify](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_8_WaitAndNotify/src/Less_25_ch_8_WaitAndNotify)\n- [Less_25_ch_9_Deadlock](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_9_Deadlock/src/Less_25_ch_9_Deadlock)\n- [Less_25_ch_10_ReentrantLock](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_10_ReentrantLock/src/Less_25_ch_10_ReentrantLock)\n- [Less_25_ch_11_DaemonThread](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_11_DaemonThread/src/Less_25_ch_11_DaemonThread)\n- [Less_25_ch_12_Interruption](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_12_Interruption/src/Less_25_ch_12_Interruption)\n- [Less_25_ch_13_ThreadPool](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_13_ThreadPool/src/Less_25_ch_13_ThreadPool)\n- [Less_25_ch_14_InterfaceCallable](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_14_InterfaceCallable/src/Less_25_ch_14_InterfaceCallable)\n- [Less_25_ch_15_Semaphore](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_15_Semaphore/src/Less_25_ch_15_Semaphore)\n- [Less_25_ch_16_CountDownLatch](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_16_CountDownLatch/src/Less_25_ch_16_CountDownLatch)\n- [Less_25_ch_17_Exchanger](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_17_Exchanger/src/Less_25_ch_17_Exchanger)\n- [Less_25_ch_18_AtomicInteger](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_18_AtomicInteger/src/Less_25_ch_18_AtomicInteger)\n- [Less_25_ch_19_SynchronizedCollection](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_19_SynchronizedCollection/src/Less_25_ch_19_SynchronizedCollection)\n- [Less_25_ch_20_ConcurrentCollection](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_20_ConcurrentCollection/src/Less_25_ch_20_ConcurrentCollection)\n- [Less_25_ch_21_CopyOnWriteArrayList](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_21_CopyOnWriteArrayList/src/Less_25_ch_21_CopyOnWriteArrayList)\n- [Less_25_ch_22_ArrayBlockingQueue](https://github.com/JcoderPaul/JavaExtended-25/tree/master/Less_25_ch_22_ArrayBlockingQueue/src/Less_25_ch_22_ArrayBlockingQueue)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcoderpaul%2Fjavaextended-25","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjcoderpaul%2Fjavaextended-25","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcoderpaul%2Fjavaextended-25/lists"}