1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-thinking-in-java-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
1.9 多线程.md 6.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 11.03.2025 09:15 d56454c

1.9 Многопоточность

В компьютерном программировании одним из базовых понятий является возможность одновременного управления несколькими задачами. Множество проблем программирования требуют от программы способности приостанавливать текущую работу, чтобы заняться другими вопросами, а затем возвращаться к основному процессу. Это можно достичь различными путями. В самом начале, программисты с низкоуровневым знанием аппаратуры писали "обработчики прерываний", приостановка основного процесса осуществлялась через аппаратные прерывания. Хотя это был полезный подход, такие программы были сложны для переноса, что создавало другую группу дорогостоящих проблем.

Иногда прерывания необходимы для задач реального времени. Однако существует множество других задач, которые требуют разделения проблемы на автономные части программы, позволяющие всей системе быстрее реагировать на запросы пользователя. В одной программе эти автономные части называются "потоками" (Thread), концепция использования которых известна как "многопоточность". Одним из наиболее распространённых примеров многопоточности является пользовательский интерфейс. Благодаря потокам пользователи могут нажимать кнопки, и программа немедленно реагирует, вместо того чтобы заставлять пользователя ждать завершения текущего действия.Начально, потоки использовались в качестве средства распределения времени выполнения одного процессора. Однако если операционная система поддерживает несколько процессоров, каждый поток может быть назначен на другой процессор, что позволяет действительно войти в состояние "параллельного вычисления". Из точки зрения языков программирования одним из самых ценных свойств многопоточности является то, что программист не обязан заботиться о том, сколько процессоров используется. Программа логически разделена на несколько потоков; если машина оснащена несколькими процессорами, программа будет работать быстрее, без необходимости специальной настройки.На основе вышеупомянутых рассуждений, возможно, вам кажется, что многопоточность очень проста. Однако следует обратить внимание на одну важную проблему: совместное использование ресурсов! Если несколько потоков выполняются одновременно и они пытаются получить доступ к одному и тому же ресурсу, возникают проблемы. Например, два процесса не могут отправлять информацию одновременно на один принтер. Для решения этой проблемы все общие ресурсы (например, принтер) должны находиться в состоянии блокировки во время их использования. Таким образом, один поток может заблокировать ресурс, завершив свою задачу, он затем освобождает (разблокирует) этот блок, позволяя другим потокам использовать тот же ресурс. Механизм многопоточности в Java уже встроен в язык, что делает возможной сложную задачу простой. Поддержка многопоточной обработки осуществляется на уровне объекта, поэтому один поток выполнения может быть представлен как объект. Java также предоставляет ограниченные схемы блокировки ресурсов. Она позволяет заблокировать любое место памяти, занимаемое объектом (память фактически является одним из множества общих ресурсов), так что одновременно может использовать конкретное пространство памяти только один поток. Для достижения этой цели используется ключевое слово synchronized.Другие типы ресурсов должны быть явно заблокированы программистом, что обычно требует от программиста создания объекта, который представляет собой замок, и проверки этого замка всеми потоками при попытке получить доступ к этому ресурсу.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-thinking-in-java-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-thinking-in-java-zh.git
oschina-mirror
wizardforcel-thinking-in-java-zh
wizardforcel-thinking-in-java-zh
master