Многопоточность Java: основы, примеры и лучшие практики
Многопоточность в Java - это способность приложения выполнять несколько задач одновременно в разных потоках. Многопоточность важна для ускорения работы приложений и повышения производительности.
В Java для создания потоков используется класс Thread.
Пример создания потока:
class MyThread extends Thread {
public void run() {
System.out.println("MyThread is running...");
}
}
// Создание потока и его запуск
MyThread thread = new MyThread();
thread.start();
В данном примере создается класс MyThread, который наследуется от класса Thread и переопределяет метод run(). После этого создается объект класса MyThread и запускается метод start(), который запускает выполнение потока.
Также существует возможность использовать интерфейс Runnable для создания потоков. Для этого нужно создать класс, реализующий интерфейс Runnable и передать его в качестве параметра при создании объекта класса Thread.
Пример:
class MyRunnable implements Runnable {
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("MyRunnable is running... " + i);
}
}
}
// Создание потока и его запуск
Thread thread = new Thread(new MyRunnable());
thread.start();
Кроме того, в Java существует синхронизация потоков. Синхронизация используется для того, чтобы ограничить доступ к общим ресурсам из разных потоков.
Пример:
class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
// Создание объекта и запуск потоков
Counter counter = new Counter();
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
counter.increment();
}
});
Thread thread2 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
counter.increment();
}
});
thread1.start();
thread2.start();
thread1.join();
thread2.join();
System.out.println(counter.getCount());
В данном примере создается класс Counter с методами increment() и getCount(), которые синхронизированы с помощью ключевого слова synchronized. Далее создаются два потока, которые инкрементируют счетчик в классе Counter. Запускаются потоки и вызывается метод join() для каждого потока, чтобы дождаться их окончания. После этого выводится значение счетчика на экран.
В заключение, многопоточность в Java позволяет использовать несколько потоков для выполнения задач и повышения производительности приложения. Для создания потоков используются класс Thread и интерфейс Runnable, а для синхронизации потоков - ключевое слово synchronized.