Урок 20

Класс Thread

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

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

Пример 1. Расширение класса java.lang.Thread

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

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

Вы можете перегрузить метод run(), но он будет проигнорирован объектом Thread, если вы не вызовете его явно. Например:

Пример 2. Перегрузка метода run()

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)

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

public class MyRunnable implements Runnable {
    public void run() {
        System.out.println("Важная работа выполняется.");
    }
}
public class MyRunnableDemo {
    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.

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

public class NameRunnable implements Runnable {
    public void run() {
        System.out.println("NameRunnable running");
        System.out.println("Run by "
                + Thread.currentThread().getName());
    }
}
public class NameThreadDemo {
    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();
    }
}



0 comments
Leave your comment: