Любой программист знает, как важны потоки в программе. В Java задача построения многопоточной программы намного упрощена.
Напишем программу в которой будет запущено три потока, каждый будет приостановлен на случайное время, после чего будет сделан вывод об окончании работы.
Создадим новый проект, главный класс и ещё один, который будет выполнятся в потоке (thread). Я назвал главный — main, а второй — thr.
Приступим к созданию thr.java:
Подключим генератор случайных чисел.
import java.util.Random;
Сделаем класс «запускаемым» (он будет при создании автоматически выполнять метод run() ):
public class thr implements Runnable { }
Создадим внутри класса строковую переменную для имени потока, численную для времени его остановки и экземпляр класса Random:
String name; int time; Random r = new Random();
После этого оформим конструктор класса:
public thr(String s) { name = s; // через параметр s передаём имя потока time = r.nextInt(999); ///генерируем число от 0 до 999 }
Теперь формируем метод run(), который будет выполнен сразуже при создании объекта:
public void run() { try { //пробуем выполнить, тк выполняется автоматически и возможны сбои System.out.printf("%s is sleeping for %d\n",name,time); ///выводим сообщение с именем потока и временем его простоя Thread.sleep(time); //остонавливаем его на заданное время System.out.printf("%s is done\n",name); //после продолжения работы выводим сообщение об окончании } catch(Exception e){} //исключения не рассматриваем }
Теперь в классе main создадим 3 потока с разным временем и посмотрим, что получится.
Создаём метод main:
public static void main(String[] args) { }
Внутри него объявляем 3 потока (создаём 3 экземпляра thr в трёх потоках):
Thread t1 = new Thread(new thr("one")); Thread t2 = new Thread(new thr("two")); Thread t3 = new Thread(new thr("three")); Thread t1 = new Thread(new thr("one")); Thread t2 = new Thread(new thr("two")); Thread t3 = new Thread(new thr("three"));
Компилируем и смотрим, что получилось:
one is sleeping for 504 two is sleeping for 478 three is sleeping for 437 three is done two is done one is done
Как видите 3 потока были созданы и «проработали» различное время, в следствии чего были остановлены в различном порядке.
Скачать готовый проект.
Спасибо за внимание.