Logo

Developer learning path

Java

Потоки в Java

Потоки в Java

91

#description

Потоки (threads) в Java – это механизм, который позволяет выполнять несколько частей программы параллельно. Каждый поток выполняется независимо от других и может иметь свой собственный стек вызовов методов. Это позволяет значительно повысить производительность и отзывчивость программы.

В Java потоки можно создать двумя способами: через наследование класса Thread или реализацию интерфейса Runnable. Для создания нового потока необходимо создать экземпляр класса Thread и вызвать метод start(). Этот метод запускает новый поток и вызывает метод run(), который содержит код, который будет выполняться в этом потоке.

Например, создание нового потока через наследование класса Thread выглядит так:

                    
public class MyThread extends Thread {
    public void run() {
        System.out.println("Hello from MyThread!");
    }
}

public static void main(String[] args) {
    MyThread myThread = new MyThread();
    myThread.start();
}
                  

Создание нового потока через реализацию интерфейса Runnable выглядит так:

                    
public class MyRunnable implements Runnable {
    public void run() {
        System.out.println("Hello from MyRunnable!");
    }
}

public static void main(String[] args) {
    MyRunnable myRunnable = new MyRunnable();
    Thread thread = new Thread(myRunnable);
    thread.start();
}
                  

Некоторые применения потоков в Java: многопоточный сервер, многопоточный клиент, многопоточный парсер и т.д.

7

#description

Потоки в Java - это механизм, который позволяет выполнять несколько задач в одном приложении параллельно. Каждый поток представляет собой отдельный, независимый от остальных поток выполнения кода. В Java имеется поддержка нескольких разновидностей потоков.

Основной класс для работы с потоками - это Thread. Создание потока происходит либо путем наследования от класса Thread, либо путем реализации интерфейса Runnable. При определении нового потока необходимо переопределить метод run(), который содержит тело потока.

Например, создание нового потока может выглядеть следующим образом:

                    
public class MyThread extends Thread {
    public void run() {
        // тело потока
    }
}

MyThread thread = new MyThread();
thread.start(); // запуск потока
                  

Кроме того, в Java имеется механизм синхронизации, который позволяет избежать ситуаций, когда два потока пытаются одновременно обратиться к одному ресурсу. Для этого используются блоки синхронизации, обозначаемые ключевым словом synchronized.

                    
public class MyThread extends Thread {
    private int counter = 0;

    public synchronized void increment() {
        counter++;
    }

    public void run() {
        for (int i = 0; i < 100000; i++) {
            increment();
        }
    }

    public int getCounter() {
        return counter;
    }
}

MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.start();
thread2.start();
thread1.join();
thread2.join(); // ожидание завершения потоков
System.out.println(thread1.getCounter() + thread2.getCounter()); // результат: 200000
                  

Здесь метод increment() является синхронизированным, что позволяет избежать одновременного изменения переменной counter двумя потоками.

March 27, 2023

Если вам не совсем понятен какой-то абзац текста из лекции, просто нажмите на него и сможете задать уточняющие вопросы по нему.

Если же непонятен весь вопрос, то нажмите на кнопки внизу, чтобы получить новый вариант объяснения, практические примеры или критически оценить сам вопрос.