Современные компьютерные системы имеют несколько ядер ЦП. Эти ядра позволяют нескольким процессам (или нескольким потокам процесса) работать одновременно на разных ядрах.
Идея этого процесса, известного как многопоточность, заключается в обеспечении оптимального использования ЦП и повышении производительности приложений. Как программист, вы можете создавать программы, которые позволяют выполнять несколько потоков одновременно, параллельно, а не по одному.
В Java и других языках программирования поток является базовой единицей использования ЦП. Потоки являются частью процесса. Простой способ взглянуть на процесс — представить программу, которая выполняется.
Однако это определение не является точным на 100%. Программа может иметь несколько процессов. Приведенное выше определение является лишь простым и полезным способом взглянуть на процесс.
Как упоминалось ранее, процессы содержат потоки. Поток разделяет данные, код и другие ресурсы процесса с другими потоками того же процесса.
В Java разработчики могут создавать многопоточные приложения. Многопоточность позволяет разделам вашей программы выполняться одновременно или параллельно, тем самым значительно повышая производительность вашего приложения.
Важно различать параллелизм и параллелизм. Программа может работать одновременно, но не параллельно.
Параллелизм относится к выполнению нескольких частей одной и той же программы (не одновременно). Эти разные части выполняются через разделение времени. С другой стороны, параллелизм относится к одновременному выполнению нескольких частей одной и той же программы.
В одноядерных системах можно добиться параллелизма за счет чередования. Однако параллелизм может быть достигнут только в многоядерной системе за счет запуска нескольких потоков на разных ядрах.
Потоки также можно использовать для противодействия накладным расходам производительности, возникающим при создании процесса. Это особенно важно, когда речь идет о выполнении повторяющихся задач, которые должна выполнять ваша программа.
Хорошим примером для демонстрации этого может быть веб-сервер. Вы можете позволить своему серверу создавать новый процесс каждый раз, когда пользователь делает запрос. Однако для этого потребуется, чтобы пользователь сначала был завершен, прежде чем этот запрос следующего пользователя также будет обработан.
Если бы вы использовали многопоточное приложение, ваш сервер просто имел бы новый поток для обработки нового запроса. Поскольку потоки совместно используют одни и те же ресурсы процесса, это избавит вашу программу от необходимости выделять новые ресурсы и связанные с этим накладные расходы.
Существует два способа использования потоков в приложениях Java. Первый способ — реализовать интерфейс Runnable. Когда вы реализуете этот интерфейс, вы должны предоставить тело для метода run() в вашем классе. Этот код будет запускаться вашим потоком.
Важно отметить, что при создании экземпляра класса поток создается не сразу. Поток создается при вызове метода start().
В этом руководстве по программированию показано, как можно использовать Java Threads API и преимущества многопоточности. При написании ваших обычных Java-приложений вы можете просто оставить JVM для обработки потоков за вас.
JVM обычно запускает один программный поток за раз, что может не подходить для систем, требующих скорости, таких как игровые приложения. Поэтому вам как программисту необходимо научиться создавать многопоточные приложения.
JAVA, разработка