Два основных способа создания потоков:
1. Наследование класса Thread.
2. Реализация интерфейса Runnable.
public class MyClass implements Runnable{
@Override
public void run(){
System.out.println("Thread is running");
}
public static void main (String[] args){
MyClass myClass = new MyClass();
Thread thread = new Thread(myClass);
thread.start();
}
}
1. Наследование класса Thread.
2. Реализация интерфейса Runnable.
public class MyClass implements Runnable{
@Override
public void run(){
System.out.println("Thread is running");
}
public static void main (String[] args){
MyClass myClass = new MyClass();
Thread thread = new Thread(myClass);
thread.start();
}
}
- New - когда создан экземпляр Thread, но метод start() еще не запущен. Поток не считается живым.
- Runnable - впервые поток принимает данный статус, после того как запускается метод start(). Далее планировщик потоков принимает решение переводить его в статус Running или другой.
- Running - это выполнение самого поток, метода run()
- Waiting - поток в режиме ожидания.
- Sleeping - поток временно уснул, метод Thread.sleep(long millis)
- Blocking - заблокирован в ожидании ресурсов, например, I/O или Object Lock.
- Dead - поток завершил свою роботу, нельзя запустить снова. Будет Runtime exception.
Методы java.lang.Thread:
- public static void sleep(long millis) throws InterruptedException
- public static void yield() - переводит текущий поток з статуса Running в статус Runnable.
- public final void join() throws InterruptedException - переводит текущий поток в статус блок. t.join() - значит, что сначала выполнится поток T, а потом уже только main поток.
- public final void setPriority(int newPriority) - от 1 до 10
Методы java.lang.Object необходимые для многопоточности, Вызываются только в синхронизированном контексте:
- public final void wait() throws InterruptedException - ждать пока не вызвется notify() или notofyAll(). Когда поток ждет, он временно отпускает лок. wait() вызывается в лока.
- public final void notify()
- public final void notifyAll()
Пример синхронизации статического метода. Используется глобальный лок MyClass.class
Комментариев нет:
Отправить комментарий