• ,

Уровень 16: план уровня и доп. материалы

План уровня:
  • Знакомство с нитями: Thread, Runnable, start, join, interrupt, sleep
  • Знакомтво с нитями
  • 2 пособа создания нитей
  • Создание своей нити — метод start()
  • Методы sleep, join, interrupt
  • Способы завершить нить
  • InterruptedException

На этом уровне трэды рассматриваются поверхностно.
Детальное углубленное изучение будет на 25-28 уровнях.

Курс Java

Что еще можно посмотреть на досуге:
Глава «Параллельное выполнение» в Thinking in Java

habrahabr.ru/post/164487/
stackoverflow.com/questions/19422366/java-uncaught-global-exception-handler

Наш джаварашовец написал статью "Как себя мотивировать". Хорошая статья получилась, прочтите обязательно.






Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария.
Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь!

Вернуться к плану обучения

Вернуться к обучению java онлайн на JavaRush

36 комментариев

Andrew
Очень жосткая лекция и интересная. Спасибо)
masterSporta
А я почти все лекции Ивана Головача по java core посмотрел))
QQRuZa
  • QQRuZa
  • 0
  • Комментарий отредактирован 2014-03-20 16:25:19 пользователем QQRuZa
Хорошее видео
Spitfire
Опечатка в листинге кода в разделе «interrupt, isInterrupted, interrupted exception»:
Clock clock = new Clock();
Thread clockThread = new Thread(click);
Spitfire
Так нити или потоки, все таки? В приложенных видео называют «потоки», в википедии тоже «потоки», а здесь — «нити», а «потоки» — неправильно. Я так понимаю, что правильно «нити», но уже устоялось «потоки»?
hubert
Можно просто треды
plyuspavel
habrahabr.ru/post/164487/
По-моему интересная статья на эту тему
Jvc
спасибо за ссылку, много интересного и доступно написано
montana
Статья изначально закладывает не верные определения. Взять хотя бы Thread.yield() заставляет процессор переключиться… хотя это не более чем «рекомендация» гарантии переключения нету, ну или о приоритетах потоков:… а потоки с меньшим приоритетом получают процессорное время только тогда, когда их более привилегированные собратья простаивают… хотя потоки с наименьшим приоритетом, будут выполнятся даже тогда когда у потоков с наибольшим(10) приоритетом есть необходимость в выполнении, просто не так часто. Как говорит Эккель: «тупиковых ситуаций не бывает». Да и другое, перечислять уже не стану
hubert
В школе тоже учат сначала, что нельзя из меньшего числа вычесть большее, что на ноль делить нельзя, что корень из отрицательных чисел брать нельзя… Курс рассчитан на новичков. И если Вы досконально разбираетесь в JMM, то попробуйте свои знания донести первому встречному на улице, а потом можно обсудить лекции.
montana
я только на 16 lvl, лишь прочитал главу 17 «Параллельное выполнение» в Thinking in Java, и опробовал примеры что там есть, а потом прочитал эту статью, и думаю, если бы человек её написавший, хорошо разбирался(как дядя Эккель=)) он бы(без усложнения материала) написал вместо заставляет -> рекомендует переключиться, например, а вместо только тогда -> не так часто, или реже, это было бы доступно и верно. Зачем изначально учить неправильно?
Lim
  • Lim
  • 0
CСсылочка «Почитать на досуге» — битая или у меня что-то не работает?
Pagliacci
Предположу что: Вот она
hundr3th
а как он так щелкает по названиям всяких базовых методов/классов и его выкидывает в то место, где это все реализовано и было написано?
Call_Me_Amigo
Зажимает Ctrl.
Call_Me_Amigo
Если читать лекции профессора, то и состариться недолго(((
Call_Me_Amigo
Кстати, ссылка на главу книги не работает.
Kolobok
mTihiy
sleep().
«Цель этого метода, чтобы программа «заснула» на некоторое время.»
Такая формулировка из лекции заставила долго ломать голову над задачей: level16.lesson10.task02.
Cчитаю, что данную формулировку из лекции стоит скорректировать. Ведь sleep() усыпляет не программу, а текущий тред. Тред, в котором вызван sleep().
mfomel
Кто-нибудь, поделитесь, пожалуйста, ссылкой на хорошее описание UncaughtExceptionHandler.
Kiranatos
В перерывах на работе читаю главу «Параллельное выполнение» в Thinking in Java. Дочитываю до раздела 1.8 Потоки-демоны.
"… Если поток является демоном, то все потоки, которые он производит, также будут демонами..."
Мы точно программирование изучаем?
XD)))))))))))))))))))))

Hail Java !!!
ab_random
  • ab_random
  • 0
  • Комментарий отредактирован 2016-01-03 02:35:36 пользователем ab_random
Задача level16.lesson05.task03 не работает по умолчанию.
Обнаружил сегодня интересную особенность задачи. При значении параметра soundsInOneSpeech от 1 000 000 и выше ( при 100 000 работает нормально, между ними — не пробовал), главный процесс не останавливается (рис. 1). Если в дочерних потоках обозначить их завершение (рис. 2), то можно увидеть, что они закончили свою работу, а главный поток продолжает выполняться.

Но стоит добавить в цикл главного потока любую операцию вывода (рис. 3) (закомментированный вариант использовался при отладке), как программа сразу же начинает корректно отрабатывать и завершаться.

Так вот, кто может объяснить, ПОЧЕМУ так происходит? Спасибо.

P.S. На борту Windows 7 Корпоративная 64 бита, Идея 15.0.2, jdk 1.8.0_65
рис. 1рис. 2рис. 3
ab_random
P.S. Я понял, но немного не туда написал, но кнопки «Удалить комментарий» не увидел.
svorobei
Кое-что осталось непонятным. Получается нить может завершаться сама по себе даже если ее перед этим интерапнуть из main? не раз встречались задачи, где уже нить должна была закончить свое выполнение, а она все выводила и выводила. confused ::(
Invictus
  • Invictus
  • 0
  • Комментарий отредактирован 2016-03-30 12:00:59 пользователем Invictus
Дело в том, что метод interrupt() не предназначен для мгновенной остановки потока, это просто индикатор (булевая переменная), которая показывает что потоку надо завершаться. Если в потоке были методы, генерирующие InterruptedException (sleep,join), то при вызове Interrupt() этот эксепшен будет выкинут. Если таких методов нет, то для завершения потока надо делать проверку на интеррапт, например:
<code>
if (Thread.interrupted()) {
    throw new InterruptedException();
}</code>
ILIA
  • ILIA
  • 0
Пример кода данный на уровне 16 в лекции 9 не соответствует описанию. Да логически все подходит и вытекает одно из другого, но без блока try/catch не работает. Ведь надо обработать исклечение вызываемое методом Thread.sleep(100), когда мы переопеределяем метод run.

Это так и задуманно, и я чего-то не понимаю, или это опечатка?
MariaM
Кто читал и разбирал примеры в Философии Java подскажите пожалуйста, почему в примере на перехват исключений (так и называется параграф «Перехват исключений» в гл. Параллельное выполнение) может выводиться в консоль все в двойном экземпляре (в книге не так). Код вот здесь (проверила несколько раз, вроде все верно). Не понимаю, когда и почему создается второй тред.

Вывод такой:

ekkel.concurrency.ExceptionHandler.HandlerThreadFactory@5bf6b81c creating new Thread
created Thread[Thread-0,5,main]
eh = ekkel.concurrency.ExceptionHandler.MyUncaughtExceptionHandler@1e235551
run() by Thread[Thread-0,5,main]
eh=ekkel.concurrency.ExceptionHandler.MyUncaughtExceptionHandler@1e235551
ekkel.concurrency.ExceptionHandler.HandlerThreadFactory@5bf6b81c creating new Thread
created Thread[Thread-1,5,main]
eh = ekkel.concurrency.ExceptionHandler.MyUncaughtExceptionHandler@3088890d
caught java.lang.RuntimeException
MariaM
в ссылке на главу книги пропущена буква i в слове index =) Если поправить, открывается оглавление, откуда легко выйти на любую главу
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.