Page 238 - 6571
P. 238

Після того як новий потік буде створений, для його запуску
                  потрібно  викликати  метод  start(),  оголошений  в  класі  Th-
                  read. По суті, метод start() виконує виклик методу run().

                        Призупинити виконання деякого потоку можна за допомогою
                  методу sleep() визначеного в класі Thread. Метод sleep()

                  змушує потік, з якого він був викликаний, призупинити виконан-
                  ня на вказану кількість мілісекунд. Також метод sleep() дозво-
                  ляє задати період затримки в мілісекундах і наносекундах, проте

                  дана форма може застосовуватися тільки в середовищах, які пе-
                  редбачають задання часових проміжків в наносекундах. Оскільки
                  метод  sleep()  може  генерувати  виняток  типу  Interrupt-

                  Exception (у випадку, якщо деякий інший потік захоче перер-
                  вати його виконання), то код який його викликає повинен вико-

                  нуватися у блоці try / catch.
                        Потік перериває своє виконання тоді коли його метод run()
                  повертає керування, виконавши оператор return вслід за остан-

                  нім  оператором  у  своєму  тілі,  або  у  випадку,  якщо  генерується
                  виняткова ситуація, яка не обробляється в даному методі.
                        За допомогою методу interrupt() можна послати потоку

                  запит на його переривання. При цьому стан переривання потоку
                  встановлюється рівним значенню true. Якщо потік в даний мо-

                  мент  заблокований  викликом  методу  sleep(),  то  генерується
                  виняток типу InterruptedException.

                        Статичний метод interrupted() перевіряє, чи був перер-
                  ваний поточний потік. Його виклик має певний побічний ефект,
                  що  проявляється  у  встановленні  стану  переривання  поточного

                  потоку в логічне значення false.
                        На  відміну  від  статичного  методу  interrupted(),  метод

                  isInterrupted()  також  перевіряє,  чи  був  перерваний  потік,
                  проте виклик даного методу не змінює стан переривання потоку.
                        Коли  виконується  виклик  методу  interrupt()  з  об’єкту

                  потоку, то даний потік переводиться в стан переривання. Для то-
                  го щоб з’ясувати, чи для потоку був встановлений стан перери-
                  вання,       необхідно         викликати          статичний          метод       Thre-

                  ad.currentThread(), який повертає поточний потік і з нього

                  викликати  метод  isInterrupted(),  що  повертає  булеве  зна-
                  чення, яке характеризує стан в якому знаходиться потік.

                                                             237
   233   234   235   236   237   238   239   240   241   242   243