• ,

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

План уровня:
  • Знакомство с нитями: synchronized, volatile, yield
  • использование общего ресурса
  • знакомство с мютексом
  • synchronized блок, synchronized метод
  • локальный кэш, volatile
  • минимальный отрезок времени работы нити — квант, yield

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

Курс Java

Что еще можно посмотреть на досуге:

почитать про синхронизацию
Немного мотивации

www.quizful.net/interview/java/volatile-vs-synchronized



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

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

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

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

Akio
  • Akio
  • 0
где-то читал, что volatile делает неявную синхронизацию доступа для потоков, причем только для атомарных операций, это так?
Diana
Akio
судя по комментариям в ссылке, ответ на мой вопрос — да :)
sheka
Атомарные операции и так потокобезопасны(на то их так и назвали), соль только в запрете кеширования)
Sant9Iga
click неплохая статья про потоки и синхронизацию в частности)
masterSporta
Этот сайт пока недоступен, а почитать хочется. И на 16 уровне лекцию пропустил( и тут пропускаю
tsev
можно поискать эту страницу в кэше гугла
masterSporta
Ого! Спасибо!
VitaminX
habrahabr.ru/post/108016/
5 вещей, которых вы не знали о многопоточности
phashik
  • phashik
  • 0
  • Комментарий отредактирован 2014-03-14 00:10:49 пользователем phashik
Мне кажется, или тут неправильно? (самое начало лекции)
ttt
  • ttt
  • 0
  • Комментарий отредактирован 2014-06-19 17:19:53 пользователем ttt
Не знал что метод wait() может снимать блок
exis19ce
подскажите, пожалуйста!
по поводу volatile, если их будет слишком много в программе, из-за этого не будет падать скорость программы?
bulldorez
Доступ к переменной в RAM требует намного больше процессорного времени, чем доступ в хэш.
antonchar
hubert , по ссылке ничего нет: Период регистрации домена истек.
Скажи, пожалуйста, какие разделы книги читать.
klyushin
В самом начале лекции дается пример:
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;
        }

программа будет виснуть… или это как раз атомарные операции? Кто-то может объяснить или подсказать что прочитать что бы въехать в этот нюанс? Спасибо!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.