java tutorial - Руководство Java Multithreading Programming - учебник java - java programming - учиться java - java basics - java for beginners
1- Принцип работы Thread
java - джава - учиться java - учебник java -
java multi поток proram
- примеры java - java-программы
2- Пример начала с Thread
- Нам нужны 2 класса, которые будут участвовать в данном примере.
- HelloMain это обычный класс с функцией main, являющийся главным потоком (main thread).
- HelloThread это расширенный класс из класса Thread. Создан и работает внутри главного потока и будет работать параллельно с главным потоком.
java - джава - учиться java - учебник java -
нить java
- примеры java - java-программы
HelloThread.java
- HelloMain это обычный класс с функцией main, являющийся главным потоком (main thread).
- HelloThread это расширенный класс из класса Thread. Создан и работает внутри главного потока и будет работать параллельно с главным потоком.
- Результат запуска класса HelloMain:
java - джава - учиться java - учебник java -
основной поток java
- примеры java - java-программы
3- Runnable Interface
- Вы так же можете создать thread из класса выполняющего интерфейсt Runnable. Смотрите иллюстрированный пример:
RunnableDemo.java
RunnableTest.java
Запуск класса RunnableTest:
java - джава - учиться java - учебник java -
запуску теста
- примеры java - java-программы
4- Поток Deamon (Deamon Thread)
- Java делит thread на 2 вида: обычный и Deamon Thread. Они отличаются только тем, как останавливают работу. В одной программе обычные потоки и поток Deamon работают параллельно. Когда все обычные паотоки завершаются, потоки Deamon так же завершатся, несмотря на то, что они выполняют на тот момент.
- Чтобы лучше понять, рассмотрим следующий пример, нам нужны 3 класса для участя в иллюстрации:
java - джава - учиться java - учебник java -
Димон поток
- примеры java - java-программы
NoneDeamonThread.java
DeamonThread.java
DaemonTest.java
- Результаты запуска класса DeamonTest:
java - джава - учиться java - учебник java -
Главный поток
- примеры java - java-программы
- Изображение выше показывает, что поток Deamon остановлен когда все обычные потоки остановлены. Несмотря на то, что его код работает бесконечно.
Для чего обычно используется поток deamon?
- Один из важных потоков Deamon в Java это поток Garbage Collection, то есть собрать ресурсы, которые больше не используются чтобы освободить память. Когда все потоки пользователя перестают работать, останавливается так же поток Garbage Collection.
5- Использование join() & join(long)
- Thread.join() это метод оповещающий подождать, когда завершится этот поток, только потом продолжает запускаться родительский поток.
Посмотрим изображенный пример:
java - джава - учиться java - учебник java -
присоединиться-к потоку java
- примеры java - java-программы
JoinThread.java
JoinTest.java
Результаты запуска класса JoinTest:
java - джава - учиться java - учебник java -
соединения испытания
- примеры java - java-программы
- Пример использования join(long millis):
JoinTest2.java
6- Обработки исключений для Thread
- Метод Thread.setDefaultUncaughtExceptionHandler() настроен обрабатывать по умолчанию, когда поток внезапно завершается из-за непойманного исключения, и не было другой обработки, которая была определена для того потока.
ThreadExceptionDemo.java
Результаты запуска примера:
java - джава - учиться java - учебник java -
исключение потока
- примеры java - java-программы
7- Использование yield()
- Теоритически, "yield" это значит отпустить, сдаться. Поток yield говорит виртуальной машине, что он готов, чтобы другие потоки расположились на его месте. Это значит он не делеает ничего важного. Заметьте, что это только подсказка, и не гарантирует быть эффективным везде.
- yield() определяется в Thread.java следующим образом