Thread

Два основных способа создания потоков:
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. New - когда создан экземпляр Thread, но метод start() еще не запущен. Поток не считается живым.
  2. Runnable - впервые поток принимает данный статус, после того как запускается метод start(). Далее планировщик потоков принимает решение переводить его в статус Running или другой.
  3. Running - это выполнение самого поток, метода run()
  4. Waiting - поток в режиме ожидания.
  5. Sleeping - поток временно уснул, метод Thread.sleep(long millis)
  6. Blocking - заблокирован в ожидании ресурсов, например, I/O или Object Lock.
  7. Dead - поток завершил свою роботу, нельзя запустить снова. Будет Runtime exception.
Метод Start() не можна вызывать два раза. Если будет вызван второй раз, то будет IllegalThreadStateException.


Методы 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



Комментариев нет:

Отправить комментарий