ПОЛНАЯ ВЕРСИЯ ЭТОГО КУРСА: www.udemy.com/course/javarussia/?referralCode=A36A8387475CAFDC6776 ДЛЯ ЖИТЕЛЕЙ РФ: alfa.swiftbook.ru/courses/415 Плейлист с другими открытыми уроками: czcams.com/play/PLAma_mKffTOTtGQEbqurDRoPwDEKzzZQA.html
volatile - не кэшируется, как говорил Наиль. И он объяснил зачем это делается. Я хочу добавить, что за счет того что данная переменная не кэшируется скорость работы программы падает. Не стоит злоупотреблять переменными volatile.
Как я понимаю, пример, который должен проиллюстрировать необходимость применения volatile, не подходящий. Т.к. волатайл нужен для разделяемых ресурсов между разными потоками. А в данном примере с переменной всегда работает только 1 поток. Другой же поток обращается к ней не на прямую, а через сеттер родного потока. Кто-нибудь может пояснить?
Сам нашёл ответ на свой вопрос. Метод shoutdown хоть и объявлен в классе нового потока, но всё равно вызывается в основном потоке и является частью основного потока. Поэтому действительно, использование volatile оправдано и пример корректный.
Наиль у тебя шикарные уроки! Я совершенно по другому стал воспринимать андроид разработку, после курса джавы для новичков. Спасибо большое! Скажи пожалуйста а по котлину ты не планируешь записывать уроки? Очень нравится этот язык и я бы без раздумий купил твой курс по котлину)) хочется стать гуру в этом языке и для андроида и в целом
потому что большинство людей к 10-20 видео понимают, что программирование это не их судьба. лично я дошел до "продвинутой джавы" полгода назад и начал жестко тупить. заныл и бросил обучение, а месяц назад вернулся и теперь идет попроще. надеюсь дойду до конца обучения на этот раз.
Немного непонятно как все таки в данной программе Main поток меняет переменную? Он же вызывает просто метод, а сам метод находится в другом потоке - потоке, которому принадлежит переменная. Вот это можно пояснить?
Главный поток останавливается в ожидании ввода данных, после нажатия Enter ввод данных завершается и главный поток переходит к следующему шагу - вызову метода shutdown, который меняет значение переменной running на false, что служит основанием для завершения потока MyThread.
Странно. Вот пробал воспроизвести ситуацию на ryzen 5 1500x - на нем как раз кеш делиться попарно по 8 мб на 2 ядра - и он не связан между собой (именно разделенный). Запустил аж 24 потока - но даже в такой ситуации все 24 потока остановились.
У меня новый ноут. у меня код не срабатывает иногда. бывает со 2-го, 3-го раза. более того добавила в код volatile и тоже не срабатывает с первого раза))). код вроде правильно переписала
Нажимаю Enter, появляется пустая строка и дальше идут слова Hello. Нажимаю Enter второй раз и программа завершается. Но есть и редкие случаи когда завершается с одного нажатия Enter. Объясните, пожалуйста, почему так?
Нет, не правильно. Так все потоки прекращаются. Например, если в потоке main после myThread.shutdown(); написаны еще команды то они не будут выполнятся, из-за System.exit(0); А в случае описанном в уроке, прекратится только один поток, и в потоке main продолжатся выполнятся другие команды.
ПОЛНАЯ ВЕРСИЯ ЭТОГО КУРСА: www.udemy.com/course/javarussia/?referralCode=A36A8387475CAFDC6776
ДЛЯ ЖИТЕЛЕЙ РФ: alfa.swiftbook.ru/courses/415
Плейлист с другими открытыми уроками: czcams.com/play/PLAma_mKffTOTtGQEbqurDRoPwDEKzzZQA.html
Как всегда, единственный автор, которого я понимаю с первого раза.
volatile - не кэшируется, как говорил Наиль. И он объяснил зачем это делается. Я хочу добавить, что за счет того что данная переменная не кэшируется скорость работы программы падает. Не стоит злоупотреблять переменными volatile.
Минздрав предупреждает
А это разве не очевидно?
@@gleb_bro8710 нет
@@gleb_bro8710 нет
@@gleb_bro8710 нет
Наиль, спасибо тебе большое за все труды.
Шикарно объяснил! Очень понятно и интересно! Спасибо!
Большое спасибо за Ваши труды! Очень интересно, доступно и познавательно!
давайте еще видео пожалуйста по продвинутой java
ваши уроки просто божественный дар
Все видео в курсе «Продвинутая Java”. Ссылка в описании.
Шикарно! Буквально на пальцах разъяснил то, что в книгах ну очень тяжело описано
Как я понимаю, пример, который должен проиллюстрировать необходимость применения volatile, не подходящий. Т.к. волатайл нужен для разделяемых ресурсов между разными потоками. А в данном примере с переменной всегда работает только 1 поток. Другой же поток обращается к ней не на прямую, а через сеттер родного потока. Кто-нибудь может пояснить?
Сам нашёл ответ на свой вопрос. Метод shoutdown хоть и объявлен в классе нового потока, но всё равно вызывается в основном потоке и является частью основного потока. Поэтому действительно, использование volatile оправдано и пример корректный.
Пожалуйста, продолжай кусы по java! Готов платить за них на udemy. Спасибо тебе большое.
Шикарное объяснение, спасибо огромное!
спасибо за лекцию, всё четко и понятно!
Спасибо, очень доступно объяснили!)
Автору респект!
Наиль у тебя шикарные уроки! Я совершенно по другому стал воспринимать андроид разработку, после курса джавы для новичков. Спасибо большое! Скажи пожалуйста а по котлину ты не планируешь записывать уроки? Очень нравится этот язык и я бы без раздумий купил твой курс по котлину)) хочется стать гуру в этом языке и для андроида и в целом
Спасибо!
Пока не планирую, может в будущем :)
Не пойму, почему у канала с каждым видео меньше просмотров... шикарные же видео.
потому что большинство людей к 10-20 видео понимают, что программирование это не их судьба. лично я дошел до "продвинутой джавы" полгода назад и начал жестко тупить. заныл и бросил обучение, а месяц назад вернулся и теперь идет попроще. надеюсь дойду до конца обучения на этот раз.
все максимально понятно донесено)
Спасибо за труд 👍
Эх, я то надеялся что решил полностью выложить курс здесь(
Отличные уроки! Спасибо.
насчет MainMemory
насколько я знаю stack у каждого потока свой, значит значения переменой у потоков будут все равно разные.
Прекрасное видео
Лучший, просто лучший! А я то думал что так как изменение переменной логического типа атомарное действие volatile для boolean не нужен
Спасибо, отличное объяснение
Спасибо, мастер
Thanks a lot!
Немного непонятно как все таки в данной программе Main поток меняет переменную? Он же вызывает просто метод, а сам метод находится в другом потоке - потоке, которому принадлежит переменная. Вот это можно пояснить?
Главный поток останавливается в ожидании ввода данных, после нажатия Enter ввод данных завершается и главный поток переходит к следующему шагу - вызову метода shutdown, который меняет значение переменной running на false, что служит основанием для завершения потока MyThread.
Огромное спасибо!!!
volatile не работает, поток завершает работу после второго нажатия Enter или третего
то же самое
Спасибо!
Красава!!!
Странно. Вот пробал воспроизвести ситуацию на ryzen 5 1500x - на нем как раз кеш делиться попарно по 8 мб на 2 ядра - и он не связан между собой (именно разделенный). Запустил аж 24 потока - но даже в такой ситуации все 24 потока остановились.
Попробуй убрать из цикла while операцию sleep. Пусть пустой цикл крутится.
У меня новый ноут. у меня код не срабатывает иногда. бывает со 2-го, 3-го раза. более того добавила в код volatile и тоже не срабатывает с первого раза))). код вроде правильно переписала
Нажимаю Enter, появляется пустая строка и дальше идут слова Hello. Нажимаю Enter второй раз и программа завершается. Но есть и редкие случаи когда завершается с одного нажатия Enter.
Объясните, пожалуйста, почему так?
Думаю, это как раз проблема в когерентности кэшей, что тут объясняется. Пробуй пометить volatile переменную, как в уроке.
Спасибо
пробовал у себя запустить такой же код, и без слова volatile он работает через раз
Спасибо за уроки. А есть урок про Динамический Прокси?
нет
Не совсем понятно зачем это надо, если есть Synchronized? В чём разница?
прохожу курс по юдеми мне очень сложна понять многопточность я делаю все чтобы понять.Как всегда хочется бросить 😭😭😭
Будут ли ещё видео Продвинутая Java? Многопоточность начали и на волатайл закончилось. Жаль...
Полный курс "Продвинутая Java" находится здесь: www.udemy.com/javarussia/?couponCode=ADVANCED_JAVARUSSIA
Видео начинается на 14:15 минуте
Волотильность)
было еще проще написать так:(6:33-9:13)
package PackageBigThread;
import java.util.Scanner;
public class ClassThread1 {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
Scanner scn = new Scanner(System.in);
scn.nextLine();
myThread.shutdown();
}
}
class MyThread extends Thread{
public void run() {
while(true) {
System.out.println("Hello");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
public void shutdown(){
System.exit(0);
}
}
Нет, не правильно. Так все потоки прекращаются. Например, если в потоке main после myThread.shutdown(); написаны еще команды то они не будут выполнятся, из-за System.exit(0); А в случае описанном в уроке, прекратится только один поток, и в потоке main продолжатся выполнятся другие команды.
Будет ли видео по github?
Будет целый курс в течение месяца, следите за обновлениями на канале!
Поддерживаю
Где курс то целый обещанный 3 месяца прошло
@@ivanshurkov1768 никогда программисты не сдавали или не делали свои проекты во время ) это один из случай))
Тыща лайков
Интересно. Но вы бы хоть шрифт сделайте побольше, ни слова разглядеть невозможно.