Интерфейс Runnable и класс Thread в Java

Author: Tatyana Milkina

Класс java.lang.Thread используется для создания нового потока.

Начнем с рассмотрения примера, демонстрирующего создание нового потока:

public class MyThread extends Thread {
    public void run() {
        System.out.println("Важная работа выполняется в потоке " + getName());
    }
}
public class MyThreadExample {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
    }
}

Метод start() - это специальный метод, создающий новый поток, в котором будет выполняться метод run(). Метод start() не может быть вызван дважды для одного и того же объекта, даже если поток завершен. Иначе будет выброшено и исключение IllegalThreadStateException.

Вы можете перегрузить метод run(), но он будет проигнорирован объектом Thread, если вы не вызовете его явно. Например:
public class MyThread extends Thread {
    public void run() {
        System.out.println("Important job running in MyThread");
    }
    public void run(String s) {
        System.out.println("String in run is " + s);
    }
}

Конструкторы класса Thread:

Thread()
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(String name)

Пример реализация интерфейса java.lang.Runnable:

public class MyRunnable implements Runnable {
    public void run() {
        System.out.println("Важная работа выполняется.");
    }
}
public class MyRunnableExample {
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();

        Thread thread1 = new Thread(myRunnable);
        Thread thread2 = new Thread(myRunnable);
        Thread thread3 = new Thread(myRunnable);

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

Потоком можно управлять через объект Thread. Чтобы делать это, можно получить ссылку на него вызовом метода currentThread(), который является общедоступным статическим (public static) методом класса Thread.

Пример получения имени текущего потока:

public class NameRunnable implements Runnable {
    public void run() {
        System.out.println("NameRunnable running");
        System.out.println("Run by "
                + Thread.currentThread().getName());
    }
}
public class NameThreadExample {
    public static void main(String[] args) {
        NameRunnable nr = new NameRunnable();
        Thread tread1 = new Thread(nr);
        tread1.setName("First Thread");
        tread1.start();

        Thread tread2 = new Thread(nr, "Second Thread");
        tread2.start();
    }
}
Читайте также:
Комментарии