Skip to content

1.1 Runnable

Конечно! Вот несколько примеров использования интерфейса Runnable в Java, чтобы лучше понять его работу.

Пример 1: Простая реализация Runnable

В этом примере мы создадим класс, реализующий интерфейс Runnable, и запустим его в отдельном потоке.

class MyRunnable implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("Running in thread: " + Thread.currentThread().getName() + " - Count: " + i);
            try {
                Thread.sleep(500); // Задержка в 500 мс
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class Main {
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread1 = new Thread(myRunnable);
        Thread thread2 = new Thread(myRunnable);

        thread1.start();
        thread2.start();
    }
}

Пример 2: Использование анонимного класса

В этом примере мы создадим поток, используя анонимный класс, реализующий интерфейс Runnable.

public class Main {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 5; i++) {
                    System.out.println("Running in thread: " + Thread.currentThread().getName() + " - Count: " + i);
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        thread.start();
    }
}

Пример 3: Использование лямбда-выражения (Java 8 и выше)

Если вы используете Java 8 или выше, вы можете использовать лямбда-выражения для упрощения кода.

public class Main {
    public static void main(String[] args) {
        Runnable myRunnable = () -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("Running in thread: " + Thread.currentThread().getName() + " - Count: " + i);
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };

        Thread thread = new Thread(myRunnable);
        thread.start();
    }
}

Пример 4: Запуск нескольких потоков

В этом примере мы создадим несколько потоков, которые будут выполнять одну и ту же задачу.

class MyRunnable implements Runnable {
    private String threadName;

    public MyRunnable(String name) {
        this.threadName = name;
    }

    @Override
    public void run() {
        for (int i = 0; i < 3; i++) {
            System.out.println(threadName + " is running - Count: " + i);
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new MyRunnable("Thread 1"));
        Thread thread2 = new Thread(new MyRunnable("Thread 2"));
        Thread thread3 = new Thread(new MyRunnable("Thread 3"));

        thread1.start();
        thread2.start();
        thread3.start();
    }
}

Заключение

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