Реализация потоков в Java

Через потоковую модель Java представлены наиболее общие свойства, связанные с многопоточным программированием. Вся прелесть работы с потоками реализуется через класс Thread. У класса есть несколько статических методов для работы с потоками. Эти методы перечислены в таблице 1.1.

Метод Описание
 getId()  Методом в качестве результата возвращается идентификатор потока — уникальное целое число, генерируемое при создании потока.
 getName()  Метод в качестве результата возвращает имя потока, из которого вызывается этот метод.
 getPriority()  Методом в качестве результата возвращает приоритет потока.
 getThreadGroup()  Методом в качестве значения возвращается группа, к которой принадлежит текущий поток.
 holdsLock()  Метод в качестве значения возвращает логическое значение. Значение равно true, если метод удерживает монитор объекта, переданного в качестве аргумента методу. В противном случае возвращается значение false. Монитор — объект, который используется для блокировки ресурса потоком и недопущения одновременного обращения к ресурсу разных потоков. Концепция монитора используется для синхронизации работы потоков.
 interrupt()  Методом выполняется прерывание потока
 isAlive()  Метод используется для того, чтобы определить, используется ли поток.
 join()  Метод-инструкция ожидания завершения потока.
 run()  Метод определяет точку входа в поток. Программный код потока задается путем переопределения этого метода.
 setName()  Методом задается имя потока(имя потока указывается в виде текстовой строки аргументом метода).
 setPriority()  Методом задается приоритет потока(приоритет передается аргументом методу).
 sleep()  Метод используется для приостановки выполнения потока. Время(в миллисекундах), на которое выполняется приостановка в работе потока, указывается аргументом метода.
 start()  Метод для запуска потока. При вызове этого метода автоматически запускается на выполнение метод run(), объявленный в интерфейсе Runnable.
 wait()  Метод переводит поток в режим ожидания.
 yield()  Метод временно приостанавливает текущий поток и позволяет выполнение других потоков.

Здесь следует дать некоторые пояснения относительно выполнения и не выполнения потоков. Поскольку потоки в общем случае выполняются параллельно(одновременно), то, как говорится, возможны варианты. В том случае, если разные потоки в процессе выполнения вступают в конфликт, например, в части доступа к системным ресурсам, в расчет принимается такой немаловажный показатель, как приоритет потока.

Приоритет потока — это число, которое определяет «важность» этого потока. Само по себе значение приоритета не принципиально, важно только, у какого потока приоритет больше. Тот поток, у которого поток выше, в случае «конфликта интересов» имеет преимущество. Поток с более высоким приоритетом может прервать выполнение менее приоритетного потока.

Работу потока, кроме окончательного и бесповоротного завершения, можно приостановить. Выполнение потока приостанавливается на определенное время, после чего выполнение потока возобновляется. Отдельной темой является синхронизация потоков.

Ведь в процессе выполнения потоки могут(и, как правило, так и происходит) обращаться к одним и тем же ресурсам. Проблемы, которые при этом возникают, намного серьезнее, чем может показаться на первый взгляд. Решаются эти проблемы как раз через процедуру синхронизации потоков.

Видео по теме: