|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Старт потока FirstСтарт потока Second Завершение потока Second Завершение потока First Завершение main Несмотря на вызов метода join() для потока tr1, поток tr2 будет работать, в отличие от потока main, который сможет продолжить свое выполнение только по завершении потока tr1. Вызов метода yield() для исполняемого потока должен приводить к приостановке потока на некоторый квант времени, для того чтобы другие потоки могли выполнять свои действия. Однако если требуется надежная остановка потока, то следует использовать его крайне осторожно или вообще применить другой способ. // пример # 5: задержка потока: YieldRunner.java package chapt14; public class YieldRunner { public static void main(String[] args) { new Thread() { public void run() { System. out. println("старт потока 1"); Thread. yield (); System. out. println("завершение 1"); } }.start(); new Thread() { public void run() { System. out. println("старт потока 2"); System. out. println("завершение 2"); } }.start(); } } В результате может быть выведено: Старт потока 1 Старт потока 2 Завершение 2 Завершение 1 Активизация метода yield() в коде метода run() первого объекта потока приведет к тому, что, скорее всего, первый поток будет остановлен на некоторый квант времени, что даст возможность другому потоку запуститься и выполнить свой код. Потоки-демоны Потоки-демоны работают в фоновом режиме вместе с программой, но не являются неотъемлемой частью программы. Если какой-либо процесс может выполняться на фоне работы основных потоков выполнения и его деятельность заключается в обслуживании основных потоков приложения, то такой процесс может быть запущен как поток-демон. С помощью метода setDaemon(boolean value), вызванного вновь созданным потоком до его запуска, можно определить поток-демон. Метод boolean isDaemon() позволяет определить, является ли указанный поток демоном или нет. /* пример # 6: запуск и выполнение потока-демона: DemoDaemonThread.java */ package chapt14; class T extends Thread { public void run() { try { if (isDaemon()){ System. out. println("старт потока-демона"); sleep (10000); // заменить параметр на 1 } else { System. out. println("старт обычного потока"); } } catch (InterruptedException e) { System. err. print("Error" + e); } finally { if (!isDaemon()) System. out. println( "завершение обычного потока"); Else System. out. println( "завершение потока-демона"); } } } package chapt14;
public class DemoDaemonThread { public static void main(String[] args) { T usual = new T(); T daemon = new T(); daemon.setDaemon(true); daemon.start(); usual.start(); System. out. println( "последний оператор main"); } } В результате компиляции и запуска, возможно, будет выведено: последний оператор main Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |