Автор оригинала: Pankaj Kumar.
Многопоточность в Java-очень важная тема. Я много писал о потоках на Java. Поток Java – это легкий процесс, который выполняет некоторую задачу. Java обеспечивает поддержку многопоточности с помощью класса Thread, и приложение может создавать несколько потоков, выполняющихся одновременно.
Многопоточность в Java
В приложении существует два типа потоков – пользовательский поток и поток демона . Когда мы запускаем приложение, main-это первый созданный пользовательский поток, и мы можем создавать несколько пользовательских потоков, а также потоки демонов. Когда все пользовательские потоки будут выполнены, JVM завершит программу.
Мы можем установить разные приоритеты для разных потоков, но это не гарантирует, что поток с более высоким приоритетом будет выполняться первым, чем поток с более низким приоритетом. Планировщик потоков является частью реализации операционной системы, и когда поток запускается, его выполнение контролируется планировщиком потоков, и JVM не имеет никакого контроля над его выполнением.
Мы можем создавать потоки либо путем реализации управляемого интерфейса, либо путем расширения класса потоков.
Thread t = new Thread(new Runnable(){ @Override public void run() { } });
Выше приведен однострочный оператор для создания нового потока, здесь мы создаем запускаемый как анонимный класс, прочитайте этот пост, чтобы узнать о внутреннем классе, вложенном классе и анонимном внутреннем классе .
За последние несколько недель я опубликовал несколько полезных статей о многопоточности на Java, вы можете следить за ними, чтобы узнать о потоках на Java.
Потоки в Java
С помощью лямбда-выражений Java 8 мы также можем создавать потоки на java, как показано ниже, потому что Runnable-это функциональный интерфейс.
Thread t = new Thread(() -> {System.out.println("My Runnable");}); t.start();
Пример потока Java
Это первый пост в серии учебников по многопоточности на java. Прочитайте это, чтобы узнать о Процессе и Потоке . В чем разница между потоком и процессом. Преимущества использования потоков и как мы можем создавать потоки, используя Управляемый интерфейс и Поток класс. В этом посте также сравнивается выполняемый интерфейс с классом потока.
Спящий поток Java
Режим сна потока Java используется для приостановки выполнения текущего потока. Мы будем широко использовать режим сна потоков в будущих сообщениях, поэтому полезно знать, как это работает и является ли это точным или нет?
Соединение потоков Java
Иногда нам нужно подождать, пока другие потоки завершат его выполнение, прежде чем мы сможем продолжить. Мы можем достичь этого с помощью Thread join , узнайте, как это работает и когда мы должны его использовать.
Состояния потока Java
Важно понимать различные состояния потока . Узнайте, как поток изменяет свое состояние и как планировщик потоков изменяет состояние потока.
Поток Java ждет, уведомляет и уведомляет всех
Класс объектов Java содержит три метода, с помощью которых потоки могут сообщать о состоянии блокировки ресурса. Изучите на примере использования этих методов класса объектов в простой реализации с уведомлением об ожидании.
Безопасность потоков Java и синхронизация Java
Мы знаем, что потоки совместно используют ресурсы объектов, это может привести к повреждению данных, поскольку эти операции не являются атомарными. Узнайте, как мы можем достичь потокобезопасности в java с помощью различных методов. Прочитайте этот пост , чтобы узнать о правильном использовании синхронизации , синхронизированных методах и синхронизированных блоках. Существуют различные примеры синхронизированного использования, и в этом посте объясняется, в чем проблемы с ними.
Исключение Java в главном потоке
JVM создает первый поток, используя метод main . В этом посте рассказывается о некоторых распространенных исключениях, которые мы видим в повседневной жизни, и о том, что является их основной причиной и как их исправить.
Потокобезопасность в одноэлементном классе
В этой статье вы узнаете основные концепции создания одноэлементного класса. Каковы проблемы безопасности потоков при различной реализации. Как мы можем достичь потокобезопасности в одноэлементном классе .
Поток демона в Java
Простая статья, объясняющая потоки демонов и то, как мы можем создавать потоки демонов в java.
Локальный поток Java
Мы знаем, что потоки совместно используют переменные объекта, но что, если мы хотим, чтобы локальные переменные потока создавались на уровне класса. Java предоставляет ThreadLocal служебный класс для создания локальных переменных потока. Читайте больше, чтобы узнать о том, как мы можем создавать ThreadLocal переменные в программе java.
Дамп потоков Java
Дамп потоков Java предоставляет информацию о текущих потоках для программы. Дамп потоков Java предоставляет полезную информацию для анализа проблем с производительностью приложения. Вы можете использовать дамп потока для поиска и устранения ситуаций взаимоблокировки. В этом посте объясняются различные методы, которые можно использовать для создания дампа потоков в java.
Как проанализировать взаимоблокировку и избежать ее в Java
Взаимоблокировка-это ситуация, когда несколько потоков ожидают друг от друга освобождения ресурсов, вызывая циклическую зависимость. В этой статье рассматривается ситуация, в которой мы можем зайти в тупик в программе Java. Как мы можем использовать дамп потока для поиска взаимоблокировки и рекомендации по предотвращению взаимоблокировки в java программе.
Поток таймера Java
В этом посте объясняется, как мы можем использовать классы Java Timer и TimerTask для создания заданий для выполнения с запланированным интервалом, пример программы, показывающий ее использование, и как мы можем отменить таймер.
Проблема потребителя производителя Java
До Java 5 проблема производитель-потребитель могла быть решена с помощью методов wait() и notify (), но введение BlockingQueue сделало это очень простым. Узнайте, как мы можем использовать BlockingQueue для решения проблемы производителя-потребителя в java.
Пул JavaThread
Пул потоков Java – это набор рабочих потоков, ожидающих обработки заданий. Java 5 внедрение платформы Executor очень упростило создание пула потоков в java с использованием классов Executors и ThreadPoolExecutor. Узнайте, как использовать их для создания пула потоков в java.
Java Вызываемое Будущее
Иногда нам хочется, чтобы поток мог возвращать значения, которые мы можем использовать. Вызываемый Java 5 может использоваться в том случае, если он аналогичен запускаемому интерфейсу. Мы можем использовать платформу исполнителя для выполнения вызываемых задач.
Пример задачи Java FutureTask
Класс FutureTask-это базовый конкретный класс, реализующий интерфейс будущего. Мы используем его с вызываемой реализацией и исполнителями для асинхронной обработки. FutureTask предоставляет методы реализации для проверки состояния задачи и возврата значения вызывающей программе после завершения ее обработки. Это удобно, когда вы хотите переопределить некоторые методы реализации будущего интерфейса.
Этот список будет продолжать расти по мере того, как я буду писать больше о многопоточности в java, поэтому не забудьте добавить его в закладки для дальнейшего использования.