hubert
41 уровень

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

Пост из группы Архив info.javarush.ru
3745 участников
План уровня:
  • Знакомство с нитями: synchronized, volatile, yield
  • использование общего ресурса
  • знакомство с мютексом
  • synchronized блок, synchronized метод
  • локальный кэш, volatile
  • минимальный отрезок времени работы нити - квант, yield
На этом уровне трэды рассматриваются поверхностно. Детальное углубленное изучение будет на 25-28 уровнях.
Курс Java Что еще можно посмотреть на досуге: почитать про синхронизацию Немного мотивации http://www.quizful.net/interview/java/volatile-vs-synchronized
Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария. Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь!

Вернуться к плану обучения
Вернуться к обучению
java онлайн
на JavaRush
Комментарии (19)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
jeep3332 уровень, Великий Новгород
15 апреля 2016, 09:54
klyushin18 уровень
17 марта 2016, 07:04
В самом начале лекции дается пример:
class Clock implements Runnable
{
 private boolean isCancel = false;

 public void cancel()
 {
  this.isCancel = true;
 }

 public void run()
 {
  while (!this.isCancel)
  {
   Thread.sleep(1000);
   System.out.println("Tik");
  }
 }
}


public static void main(String[] args)
{
 Clock clock = new Clock();
 Thread clockThread = new Thread(clock);
 clockThread.start();

 Thread.sleep(10000);
 clock.cancel();
}


Может быть у меня неправильные ожидания были от него, если так то поправьте меня, но мне кажется пример запутывает…
Я запускаю пример и что с volatile что без него работа программы одинаково заканчивается. Я ожидал что без volatile программа зависнет т.к.
Нить «не знает» о существовании других нитей.

В методе run переменная isCancel при первом использовании будет помещена в кэш дочерней нити.
но этого не происходит. Так вот всему виной, как опять таки, я понял: то что в цикле while(!this.isCancel) находятся Thread.sleep(1000); и System.out.println(«Tik»); — если их убрать то эффект, о котором я говорю появится. При добавлении volatile программа будет заканчиваться, а без него виснуть в цикле.

Я долго не мог понять почему у парня в примере все работает, а у меня нет…

Также не могу понять почему без volatile если в цикле while(this.isCancel) добавить вот такие операции:
while (!this.isCancel)
        {
            a++;
            b=0;
        }

программа будет виснуть… или это как раз атомарные операции? Кто-то может объяснить или подсказать что прочитать что бы въехать в этот нюанс? Спасибо!
4joke18 уровень
30 октября 2014, 12:37
Я один не могу читать Thinking in java?)
lweeeeer27 уровень
3 декабря 2014, 15:31
+1 і Я
JetFree19 уровень, Hamburg
21 декабря 2014, 01:25
+1)) Мне тоже даётся невероятно сложно) Возможно просто стиль написания такой
antonchar35 уровень
26 июля 2014, 17:05
hubert , по ссылке ничего нет: Период регистрации домена истек.
Скажи, пожалуйста, какие разделы книги читать.
exis19ce0 уровень, Днепропетровск
9 июля 2014, 18:53
подскажите, пожалуйста!
по поводу volatile, если их будет слишком много в программе, из-за этого не будет падать скорость программы?
bulldorez23 уровень, Тюмень
21 февраля 2015, 19:11
Доступ к переменной в RAM требует намного больше процессорного времени, чем доступ в хэш.
ttt30 уровень, Симферополь
19 июня 2014, 17:19
Не знал что метод wait() может снимать блок
phashik28 уровень
14 марта 2014, 00:10
Мне кажется, или тут неправильно? (самое начало лекции)
VitaminX11 уровень
7 февраля 2014, 17:44
habrahabr.ru/post/108016/
5 вещей, которых вы не знали о многопоточности
masterSporta41 уровень, Санкт-Петербург
29 января 2014, 01:42
Этот сайт пока недоступен, а почитать хочется. И на 16 уровне лекцию пропустил( и тут пропускаю
tsev30 уровень
29 января 2014, 01:59
можно поискать эту страницу в кэше гугла
masterSporta41 уровень, Санкт-Петербург
29 января 2014, 08:49
Ого! Спасибо!
Sant9Iga41 уровень
16 сентября 2013, 13:57
click неплохая статья про потоки и синхронизацию в частности)