Многопоточность в Java

При запуске любой программы образуется, по крайней мере, один поток. В Java этот поток запускается при вызове метода main(). Для создания дополнительных потоков необходимо их запустить и назначить им определенные функции, после выполнения которых потоки автоматически будут завершены виртуальной машиной.

В Java для создания потока и назначения им функций есть два способа.

1) Первым из них является наследование от класса Thread (входящего в пакет java.lang) с последующим переопределением метода run() на функцию, которую вы хотите назначить для потока.

public class ExampleThread extends Thread {

    public ExampleThread(String str) {
        super(str);
    }

    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i + " " + getName());
            try {
                sleep((long)(Math.random() * 1000));
            } catch (InterruptedException e) {}
        }
        System.out.println("= DONE: " + getName() + " =");
    }

}

Таким образом, происходит наследование от класса Thread с запуском переопределенного метода run().

Назначенная функция организует цикл, при котором на экран выводится строка, после чего программа останавливается на случайный интервал времени. После 10 итераций цикла на экран выводится слов "= DONE: name =", а поток завершается, так как функция закончила свое выполнение.

Создание потока:

public class TwoThreadsDemo {
    public static void main (String[] args) {
        new ExampleThread("Do it!").start();
        new ExampleThread("Definitely not!").start();
    }
}

Результат выполнение main():

0 Do it!
0 Definitely not!
1 Definitely not!
2 Definitely not!
1 Do it!
2 Do it!
3 Do it!
3 Definitely not!
4 Do it!
4 Definitely not!
5 Do it!
5 Definitely not!
6 Do it!
7 Do it!
6 Definitely not!
8 Do it!
7 Definitely not!
8 Definitely not!
9 Do it!
DONE! Do it!
9 Definitely not!
= DONE: Definitely not! =
Урок создан: 04 ноября 2012 | Просмотров: 15050 | Автор: Александр Барчук | Правила перепечатки


Добавить комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Комментарии: