Page 249 - 6253
P. 249

System.out.println(ob1.thread.getName() +
                           "потік запущений:" + ob1.thread.isAlive());
                        System.out.println(ob2.thread.getName() +

                           "потік запущений:" + ob2.thread.isAlive());
                        System.out.println(ob3.thread.getName() +

                           "потік запущений:" + ob3.thread.isAlive());
                        try {
                           System.out.println("Очікування завершення потоків");

                           ob1.thread.join();
                           ob2.thread.join();
                           ob3.thread.join();

                        } catch (InterruptedException e) {
                           System.out.println("Головний потік перерваний");
                           System.out.println(ob1.thread.getName() +

                              "потік запущений:" + ob1.thread.isAlive());
                           System.out.println(ob2.thread.getName() +

                              "потік запущений:" + ob2.thread.isAlive());
                           System.out.println(ob3.thread.getName() +
                              "потік запущений:" + ob3.thread.isAlive());

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

                  }
                  Як видно із представленого прикладу, потоки припиняють роботу після того, як

            виклики методу join() повернуть керування головному потоку.



                    10.4.2 Керування пріоритетами потоків та їх  синхронізація

                  Планувальник потоків використовує пріоритети потоків для прийняття рішення

            про те, коли кожен із потоків має працювати. Теоретично високопріоритетні потоки

            отримують  більше  процесорного  часу,  ніж  низькопріоритетні.  Практично  обсяг

            процесорного часу, який отримує потік, часто залежить і від інших факторів, окрім

            його  пріоритету  (наприклад,  від  того,  як  операційна  система  реалізує

            багатозадачність,  може  залежати  відносна  доступність  процесорного  часу)

            Високопріоритетний            потік       має      змогу       також       переривати         роботу

            низькопріоритетного.  Наприклад,  коли  низькопріоритетний  потік  виконується,  а

            високопріоритетний збирається продовжити своє перерване виконання (у зв’язку із





                                                              248
   244   245   246   247   248   249   250   251   252   253   254