Page 243 - 6253
P. 243

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

            програмі  може  відбутися  збій.  Попередня  програма  гарантує,  що  головний  потік

            завершиться  останнім,  оскільки  головний  потік  «спить»  1000  мілісекунд  між

            ітераціями  циклу,  а  дочірній  потік  –  тільки  500  мілісекунд.  Це  змушує  дочірній

            потік завершитися швидше за головний.

                  Розширення  класу  Thread.  Ще  один  спосіб  створення  потоку  –  це  оголосити

            клас,  який  розширює  клас  Thread,  а  потім  створити  екземпляр  даного  класу.

            Дочірній  клас  зобов’язаний  перевизначити  метод  run(),  який  є  точкою  входу  для

            нового  потоку.  Він  також  повинен  викликати  метод  start()  для  запуску  виконання

            нового  потоку.  У  лістингу  10.3  наведено  приклад  попередньої  програми,

            переписаної з використанням розширення класу Thread.


                             Лістинг 10.3 – Створення потоку шляхом розширення класу Thread



                  class MyThread extends Thread {
                     // точка входу власного потоку

                     public void run() {
                        try {
                           for (int i = 5; i > 0; i--) {

                              System.out.println("Дочірній потік:" + i);
                              Thread.sleep(500);

                           }
                        } catch (InterruptedException e) {
                           System.out.println("Дочірній потік перерваний");

                        }
                        System.out.println("Дочірній потік завершений");
                     }

                  }
                  public class Main {
                     public static void main(String[] args) {

                        MyThread thread = new MyThread();
                        thread.setName("Демонстраційний потік");

                        System.out.println("Дочірній потік створено:" + thread);
                        // запуск потоку
                        thread.start();

                        try {
                           for (int i = 5; i > 0; i--) {



                                                              242
   238   239   240   241   242   243   244   245   246   247   248