... > Java > Многозадачность в Java

Многозадачность в Java

НАВИГАЦИЯ ПО СТРАНИЦЕ

Многозадачность на уровне процессов Многозадачность на уровне потоков интерфейс Runnable

Многозадачность в 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

Можно также создавать потоки, реализуя интерфейс 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.