КЛАСС THREAD И ИНТЕРФЕЙС RUNNABLE

КЛАСС THREAD И ИНТЕРФЕЙС RUNNABLE. Поток thread представляет собой отдельный поток управления в пределах процесса.

Таким образом, у каждого потока есть начало, последовательность действий, текущее состояние и конец. Поток запускается с помощью вызова метода start класса Thread. Последовательность действий, выполняемых в рамках потока, задается в методе run. Подчеркнем, что метод run используется только для задания последовательности действий явно вызывать его не только не нужно, но и просто вредно. Поток заканчивается либо при завершении выполнения метода run, либо с помощью явных вызовов методов класса Thread stop или destroy. Возобновить работу завершенного потока невозможно.

Для временной приостановки работы потока с последующим возобновлением служат методы suspend, sleep и yeild. Обычно поток, приостановленный с помощью метода suspend, возобновляет работу посредством метода resume. Вызов метода sleep приводит к приостановке потока на заданное число миллисекунд. Вызов метода yeild означает добровольную уступку процессора другому потоку первоначальный поток остается готовым к выполнению.

Java-потоки обладают приоритетами. В спецификациях оговаривается, что Java-машина реализует вытесняющую многопотоковость. Это означает, что поток с большим приоритетом может прервать выполнение менее приоритетного потока. Однако, спецификации не требуют наличия разделения времени. Это значит, что для передачи управления потоку с тем же приоритетом, вообще говоря, требуются явные действия со стороны первоначального потока - вызов методов suspend, sleep или yeild . class my producer extends Thread int items to do my buffer the buffer my producer my buffer buf, int count super the buffer buf items to do count public void run while items to do 0 System.out.println producer to do items to do Integer item new Integer items to do items to do the buffer.insert item items to do- System.out.println producer exiting Этот пример содержит фрагмент одного из многочисленных вариантов решения задачи производитель потребитель. Он заимствован из письма, которое написал Mark Tillotson в группу сетевых новостей comp.lang.java. Данный производитель помещает в буфер квадраты целых чисел. 1 class SomethingToRun extends BaseRunner implements Runnable 2 private Thread aThread 3 public void run выполняемые действия 4 5 SomethingToRun 6 aThread new Thread this 7 aTread.start 8 9 В приведенном простом примере класс my producer является наследником класса Thread, что делает его потоком с последовательностью действий, заданной методом run. В реальных программах, как правило, объект должен наследовать у какого-либо предшественника содержательные свойства, а возможность параллельного выполнения ему предоставляется интерфейсом Runnable.

Этот интерфейс содержит единственный метод - run. В строке 6 создается новый поток.

Аргументом конструктора является объект класса SomethingToRun, а, значит, последовательность выполняемых действий потока будет определяться методом run этого класса.

Вызов метода start в строке 7 ставит поток в очередь готовых для выполнения.