Многозадачность в Java
ДОБАВИТЬ В КОНСПЕКТ
НАВИГАЦИЯ ПО СТРАНИЦЕ
Многозадачность в Java позволяет программам выполнять несколько задач одновременно. Java поддерживает как многозадачность на уровне процессов, так и на уровне потоков.
Многозадачность на уровне процессов
На уровне процессов в Java можно создать отдельные процессы, которые работают параллельно. Пример:
public class ProcessExample {
public static void main(String[] args) {
// Запускаем два отдельных процесса
Process process1 = new ProcessBuilder("notepad.exe").start();
Process process2 = new ProcessBuilder("calc.exe").start();
try {
// Ожидаем завершения процессов
int exitCode1 = process1.waitFor();
int exitCode2 = process2.waitFor();
System.out.println("Процесс 1 завершен с кодом: " + exitCode1);
System.out.println("Процесс 2 завершен с кодом: " + exitCode2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Многозадачность на уровне потоков
На уровне потоков в Java каждый поток представляет собой отдельный поток выполнения. Пример:
public class ThreadExample {
public static void main(String[] args) {
// Создаем и запускаем два потока
Thread thread1 = new MyThread("Поток 1");
Thread thread2 = new MyThread("Поток 2");
thread1.start();
thread2.start();
}
}
class MyThread extends Thread {
public MyThread(String name) {
super(name);
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(getName() + ": " + i);
try {
// Задержка для наглядности
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Многозадачность на уровне потоков с использованием интерфейса Runnable
Можно также создавать потоки, реализуя
public class RunnableExample {
public static void main(String[] args) {
// Создаем и запускаем два потока
Thread thread1 = new Thread(new MyRunnable("Поток 1"));
Thread thread2 = new Thread(new MyRunnable("Поток 2"));
thread1.start();
thread2.start();
}
}
class MyRunnable implements Runnable {
private final String name;
public MyRunnable(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(name + ": " + i);
try {
// Задержка для наглядности
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Java также предоставляет средства для синхронизации потоков и обеспечения безопасности в многозадачных приложениях. Это включает в себя использование ключевых слов synchronized и volatile, а также классов из пакета java.util.concurrent.