Урок 12 - Threads - Java для тестировщиков

preview_player
Показать описание
Потоки в Java. Что такое поток, создание и запуск потока. Синхронизация потоков.

Двенадцатый урок из курса Java для тестировщиков, который я провожу в компании, где я работаю. Курс учит базовому программированию на языке Java, объясняет основные понятия, знакомит с наиболее популярными библиотеками и средствами, которые могут пригодиться тестировщикам. Курс расчитан на слушателей, которые слабо подготовлены в программировании.

Рекомендации по теме
Комментарии
Автор

Очень хорошо объясняешь! Смотрю твои видео с открытым ртом. Спасибо за уроки!

edgarkhimich
Автор

як завжди коротко, ясно і доступно. Дякую

taraskruvch
Автор

Хотелось добавить по поводу блокировок. Прочитал в другом источнике более подробно. В JVM есть основное хранилище, поток когда запускается выгружает доступные ему поля объектов и классов из основного хранилища в свою рабочую память, ставит "флажок" - занято и работает с ними. При этом важно подчеркнуть, что блокировка является чем-то вроде флага. Если блокировка на объект установлена, это не означает, что данным объектом нельзя пользоваться, что его поля и методы становятся недоступными, – это не так. Единственное действие, которое становится невозможным, – установка этой же блокировки другим потоком, до тех пор, пока первый поток не выполнит unlock.

dmitriyyaroshenko
Автор

Имхо, немного не корректно дано объяснение дед лока. Когда потоки начинают работать, каждый поток заходит в свой синхронизированный метод (1-й) тем самым блокируя объекты для др. потоков. После, когда из первого метода в потоке 1 вызывается синхронизированный метод из потока 2 поток 1 засыпает, поскольку объект (метод которого вызывается) заблокирован другим потоком (потоком 2). Ну и по той же причине засыпает и другой поток.

fredor
Автор

Верно подмечено, однако не совсем правильно говорить "у класса могут одновременно выполняться...", потому что статический метод выполняется у объекта класса Class, а вот нестатический метод - у объекта (экземпляра) этого класса. :)

java-tkach
Автор

Огромное спасибо за уроки! Позвольте уточнить, когда вы рассказывали про deadlock (54:30+). вы привели пример с потоками, вызывающими синхронизированные методы из синхронизированных, следовательно, если поток T1 в теле синхронизированного метода вызывает синхронизированный метод из потока T2, тем самым захватывая lock (объект 2) потока T2 и устанавливая lock (jобъект 2) потока T1. Как в этом случае может исполняться какой-либо другой синхронизированный метод, если его объект (в данном случае объект 2) заблокирован первым потоком Т1?
Или наоборот: если второй поток уже исполняет синхронизированный метод объекта 2, то это значит, что объект 2 заблокирован.

KhazanViktor
Автор

Интересные уроки, а это Вы таким образом junior-ов обучаете? 

leonidsmirnov
Автор

хитеррррр! )) все из книжки Кея Хорстмана...)

vetaln
Автор

Добрый день. Не могли-бы вы привести небольшой пример того как выполнить какие либо действия в результате выполнения потока. Задача например такая: есть GUI, по нажатии на кнопку я создаю поток который выполняет  запрос регистрации на Web сервисе, это занимает некоторое время. Так вот как мне в моем GUI к примеру написать что-либо в label сразу после того как отработал мой запрос в потоке при этом чтоб мой основной GUI не лочился?

Jakcsotnik
Автор

На одноядерных компьютерах зеленые потоки работают быстрее. (Это те самые потоки, которые управлялись JVM).
С появлением многоядерных процессоров использование нативных потоков т.е. потоков ОС, стало гораздо быстрее и от JVM управления отказались.

Есть такие курсы Hexlet, там есть Операционные системы - бесплатные лекции, доступны без подписки. Мне помогли в понимании работы с потоками. ))))

Vitsed
Автор

Yuri, you're very good.. listening to your lectures since several years ago. However, I think here you're missing crucial point - the non-atomicity of increment/decrement operators. Actually, you're emphasizing the unknown order of threads, which is true!, as no one knows how OS/CPU will allocate the time for execution, will it be firstly second thread or first..
But, I think, the main point here is, that after executing dec() method, it's not about "Both threads are executing same time and the loose visibility" or something you've said... <- this was really unclear.. the main point here is the fact, that increment is not atomic operation.

Best wishes :)

georgetsiklauri
Автор

на сколько я знаю, то он правильно говорит. Сочетание букв th это зубная буква "с".

АртемФедоров-юб
Автор

Чем отличается поток stream от потока thread?

NeverIn
Автор

вообще-то это слово он на русский не переводит, так что оно звучит на английском, по-этому он всё верно говорит

АртемФедоров-юб
Автор

Добрый день. Разъясните пожалуйста, если поток обращается к методу synchronized и засыпает по причине его занятости, то можно ли сделать так, чтобы он не засыпал в ожидании(или засыпал на некоторое время), а обратился к нему когда-нибудь потом. В любом же случае доступ передается рандомно, как было сказано.

denwerxampp
Автор

"срэд" уже явно ухо режет,  - тред, через "Т" же читается.

EvgWCSL
Автор

лучше использовать слово "нити", а не "потоки". А так можно спутать с потоком ввода или вывода. Собственно, Thread и переводится как "нить".

maxlich
Автор

Срэд... *facepalm* Какие шикарные уроки, какая прекрасная подача, и какой убийственный срэд... хоть на войну отправляй...

ЕлизаветаВиноградова-сг
Автор

Ткач конечно тут молоденький, но курс надо было назвать джава для колхозников

armikastepanian