Потоки в JAVA
В данной статье рассмотрим использование потоков в языке JAVA. В их использовании нет ничего сложного, для того чтобы использовать поток следует наследовать класс Thread и переопределить метод run(), после чего для запуска вызвать метод start(). Рассмотрим на пример запуск потока:
Сначала описываем класс потока в файле myClass.java
public class myClass extends Thread {
public void run() {
System.out.println("I am thread");
}
}
А теперь класс главной программы в файле mainClass.java:
public class mainClass {
public static void main(String args[]) {
myClass mc = new myClass();
mc.start();
}
}
При запуске данного кода получим вывод: I am thread
Это был совсем простой пример, все становится сложнее когда нам нужно управлять потоком, когда он должен выполнять какие-либо действия пока мы его не захотим остановить. Есть далеко не один вариант как это сделать, я опишу тот которым пользуюсь я. Итак наш поток будет выводить сообщение в консоль каждую секунду пока мы его не остановим.
Сначала описываем JAVA класс с потоком:
public class ThreadClass extends Thread {
boolean running;
public void startThread() {
running = true;
start();
}
public void stopThread() {
boolean retry = true;
running = false;
while (retry) {
try {
this.join();
retry = false;
} catch (InterruptedException e) {}
}
}
public void run() {
while (running) {
System.out.println("Hello");
try {
sleep(1000);
} catch (InterruptedException e) {}
}
}
}
А теперь класс главной программы:
import java.io.IOException;
public class mainClass {
public static void main(String args[]) {
ThreadClass tc = new ThreadClass();
tc.startThread();
try {
System.in.read();
} catch(IOException e) {}
tc.stopThread();
}
}
При запуске каждую секунду будет выводиться сообщение "Hello" до тех пор пока мы не нажмем клавишу Enter.
Теперь разберем что мы тут написали. В JAVA классе потока мы добавили переменную running, она будет означать что поток запущен и как только она примет значение false поток остановится. Так же появились методы startThread и stopThread. startThread изменяет значение running и запускает поток. А stopThread тоже сначала изменят значение running а после этого ожидает пока поток завершится.
В одной из следующих статей мы рассмотрим как синхронизировать потоки в JAVA. А пока попробуйте напишите какой-нибудь свой простой пример на JAVA использующий потоки:)