Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
раньше объект, представляющий сам поток выполнения, и объект с методом run(), реализующим необходимую функциональность, были объединены в одном экземпляре класса MyThread, то теперь они разделены. Какой из двух подходов удобней, решается в каждом конкретном случае.
Подчеркнем, что Runnable не является полной заменой классу Thread, поскольку создание и запуск самого потока исполнения возможно только через метод Thread.start().
Работа с приоритетами
Рассмотрим, как в Java можно назначать потокам приоритеты. Для этого в классе Thread существуют методы getPriority() и setPriority(), а также объявлены три константы:
MIN_PRIORI7Y MAX_PRIORITY NORMPRIORITY
Из названия понятно, что их значения описывают минимальное, максимальное и нормальное (по умолчанию) значения приоритета. Рассмотрим следующий пример:
public class ThreadTest implements Runnable { public void run() {
double calc;
for (int NO; K50000; i++) { calc=Math.sin(i*i); if (i%10000==0) {
System.out.println(getName()+" counts " + i/10000);
}
}
}
public String getNameO {
return Thread.currentThread().getNameO;
}
public static void main(String s[]) { // Подготовка потоков Thread t[] = newThread[3]; for (int i=0; Kt.length; i++) {
t[i]=newThread(newThreadTest(), "Thread "+i);
}
// Запуск потоков for (int i=0; Kt.length; i++) { t[i].start();
System.out.println(t[i].getName()+" started");
}
}
}
В примере используется несколько новых методов класса Thread:
• getName()
Обратите внимание, что конструктору класса Thread передается два параметра. К реализации Runnable добавляется строка. Это имя потока, которое используется только для упрощения его идентификации. Имена нескольких потоков могут совпадать. Если его не задать, то Java генерирует простую строку вида "Thread-" и номер потока (вычисляется простым счетчиком). Именно это имя возвращается методом getName(). Его можно сменить с помощью метода setName().
• current-Thread ()
Этот статический метод позволяет в любом месте кода получить ссылку на объект класса Thread, представляющий текущий поток исполнения.
Курс
Программирование на і
,ІіИЯ 12________________________________________ Потоки выполнения. Синхронизация
Результат работы такой программы будет иметь следующий вИД:
Thread |
1С |
) startec |
] |
Thread |
1 1 |
startec |
1 |
Thread |
2 |
! startec |
1 |
Thread |
0 |
i counts |
0 |
Thread |
1 |
counts |
0 |
Thread |
2 |
counts |
0 |
Thread |
0 |
counts |
1 |
Thread |
1 |
counts |
1 |
Thread |
2 |
counts |
1 |
Thread |
0 |
counts |
2 |
Thread |
2 |
counts |
2 |
Thread |
1 |
counts |
2 |
Thread |
2 |
counts |
3 |
Thread |
0 |
counts |
3 |
Thread |
1 |
counts |
3 |
Thread |
2 |
counts |
4 |
Thread |
0 |
counts • |
4 |
Thread |
1 |
counts < |
4 |
Мы видим, что все три потока были запущены один за другим и начали проводить вычисления