Реализация потоков в Java
Потоки в Java 21 декабря, 2014Через потоковую модель Java представлены наиболее общие свойства, связанные с многопоточным программированием. Вся прелесть работы с потоками реализуется через класс Thread. У класса есть несколько статических методов для работы с потоками. Эти методы перечислены в таблице 1.1.
Метод | Описание |
getId() | Методом в качестве результата возвращается идентификатор потока — уникальное целое число, генерируемое при создании потока. |
getName() | Метод в качестве результата возвращает имя потока, из которого вызывается этот метод. |
getPriority() | Методом в качестве результата возвращает приоритет потока. |
getThreadGroup() | Методом в качестве значения возвращается группа, к которой принадлежит текущий поток. |
holdsLock() | Метод в качестве значения возвращает логическое значение. Значение равно true, если метод удерживает монитор объекта, переданного в качестве аргумента методу. В противном случае возвращается значение false. Монитор — объект, который используется для блокировки ресурса потоком и недопущения одновременного обращения к ресурсу разных потоков. Концепция монитора используется для синхронизации работы потоков. |
interrupt() | Методом выполняется прерывание потока |
isAlive() | Метод используется для того, чтобы определить, используется ли поток. |
join() | Метод-инструкция ожидания завершения потока. |
run() | Метод определяет точку входа в поток. Программный код потока задается путем переопределения этого метода. |
setName() | Методом задается имя потока(имя потока указывается в виде текстовой строки аргументом метода). |
setPriority() | Методом задается приоритет потока(приоритет передается аргументом методу). |
sleep() | Метод используется для приостановки выполнения потока. Время(в миллисекундах), на которое выполняется приостановка в работе потока, указывается аргументом метода. |
start() | Метод для запуска потока. При вызове этого метода автоматически запускается на выполнение метод run(), объявленный в интерфейсе Runnable. |
wait() | Метод переводит поток в режим ожидания. |
yield() | Метод временно приостанавливает текущий поток и позволяет выполнение других потоков. |
Здесь следует дать некоторые пояснения относительно выполнения и не выполнения потоков. Поскольку потоки в общем случае выполняются параллельно(одновременно), то, как говорится, возможны варианты. В том случае, если разные потоки в процессе выполнения вступают в конфликт, например, в части доступа к системным ресурсам, в расчет принимается такой немаловажный показатель, как приоритет потока.
Приоритет потока — это число, которое определяет «важность» этого потока. Само по себе значение приоритета не принципиально, важно только, у какого потока приоритет больше. Тот поток, у которого поток выше, в случае «конфликта интересов» имеет преимущество. Поток с более высоким приоритетом может прервать выполнение менее приоритетного потока.
Работу потока, кроме окончательного и бесповоротного завершения, можно приостановить. Выполнение потока приостанавливается на определенное время, после чего выполнение потока возобновляется. Отдельной темой является синхронизация потоков.
Ведь в процессе выполнения потоки могут(и, как правило, так и происходит) обращаться к одним и тем же ресурсам. Проблемы, которые при этом возникают, намного серьезнее, чем может показаться на первый взгляд. Решаются эти проблемы как раз через процедуру синхронизации потоков.
Recent Comments