Цель работы: Знакомство с потоками Java
Теоретическая справка
см. Презентация Введение в потоки Java
Детально Java-потоки.pdf или документация Sun
Задание на лабораторную работу.
1. Создайте консольное приложение с побочным потоком (пример 1).
public class Program //Класс с методом main().
{
public static void main(String[] args)
{
//Создание потока
Thread myThready = new Thread(new Runnable()
{
public void run() //Этот метод будет выполняться в побочном потоке
{
System.out.println("Привет из побочного потока!");
}
});
myThready.start(); //Запуск потока
System.out.println("Главный поток завершён...");
}
}
2. Создайте приложение с 3 потоками выполнения помимо главного.
public class Starter {
public static void main(String[] args) {
// создание объекта, реализующего интерфейс Runnable для определения работы, выполняемой в потоке
MyRunnable nr = new MyRunnable();
// создание объектов-потоков
Thread one = new Thread(nr);
Thread two = new Thread(nr);
Thread three = new Thread(nr);
// присвоение имени каждому потоку
one.setName("Первый");
two.setName("Второй");
three.setName("Третий");
// запуск потока на выполнение
one.start();
two.start();
three.start();
}
}
// определение класса, имеющего метод run() для потоков
class MyRunnable implements Runnable {
public void run() {
for (int x = 1; x <= 3; x++) {
System.out.println("Запущен "
+ Thread.currentThread().getName()
+ ", x равен " + x);
}
}//выполнится 3 раза в потоке, выведя текстовое сообщение, содержание последовательный номер выполнения и имя потока
}
3. Запустите приложение несколько раз, и сравните последовательность выполнения потоков.
4. Увеличите число выводов сообщений в методе run() и повторите эксперимент.
5. Дополните выполнение метода run() методом sleep(5 секунд) и посмотрите как измениться последовательность запуска потоков при использовании sleep();
6. Используя любые методы работы с потоками (установка приоритетов, запуск после заданного и т.п) попробуйте добиться того, чтобы
а) все потоки выполнялись в строгой очередности (сначала все 3 сообщения от первого потока, потом от второго и потом от третьего;
б) сообщения от потоков выводились последовательно (сначала 1 сообщение от первого, второго и третьего, потом 2 от трех, потом третье)
Обратите внимание, что все эти методы не обязательны к строгому выполнению Java-машиной, управляющей планировкой потоков.