
Назовите все состояния объекта
Thread?- NEW
- RUNNABLE
- BLOCKED
- WAITING
- TIMED_WAITING
- TERMINATED
В какие состояния может перейти нить, при входе в блок
synchronized?- RUNNABLE
- BLOCKED
В RUNNABLE, если блок кода, помеченный
synchronized, не занят другой нитью. Иначе наша нить получит состояние BLOCKED и будет ждать освобождения объекта-мютекса.- В какое состояние перейдет нить, при вызове метода
wait()?Вызов этого метода переводит нить в состояние WAITING.
Методwait()можно вызвать только внутри блокаsynchronizedу объекта-мютекса, который был «залочен (заблокирован)» текущей нитью, в противном случае метод выкинет исключение IllegalMonitorStateException.
Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
При вызове методаwait(), текущая нить снимает блокировку с объектаmonitor, и переходит в состояние WAITING, ожидая вызова методаmonitor.notify()илиmonitor.notifyAll()другой нитью. Как только это произойдет, нить проснется и если монитор не был занят, то захватит его и продолжит работу.
Если монитор окажется занят другой нитью, текущая нить перейдет в состояние BLOCKED. В какое состояние перейдет нить, при вызове метода
Вызов этого метода переводит нить в состояние TIMED_WAITING.wait(500)?
По аналогии с методомwait(),wait(timeout)можно вызвать только внутри блокаsynchronizedу объекта-мютекса, который был «залочен (заблокирован)» текущей нитью.Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(500); … }
При вызове метода
wait(), текущая нить снимает блокировку с объектаmonitor, и засыпает на 500 миллисекунд. Объектmonitorможет быть захвачен другой нитью.
Через 500 миллисекунд нить проснется и еслиmonitorне был занят, то захватит его и продолжит работу.
Если монитор окажется занят другой нитью, текущая нить перейдет в состояние BLOCKED.В какое состояние перейдет нить, при вызове метода
notify()?Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
Послеmonitor.wait(), нить перейдет в состояние WAITING. Методnotify(), вызванный другой нитью у объектаmonitorпереведет нить из состояния WAITING в состояние RUNNABLE, если объект monitor не будет захвачен другой нитью, иначе в состояние BLOCKED.В какое состояние перейдет нить, при вызове метода
notifyAll()?notifyAll()"пробудет" все нити. Одна из всех "спящих" (WAITING) нитей перейдет в состояние RUNNABLE, захватит монитор используемого объекта и продолжит свою работу. Остальные окажутся в состоянии BLOCKED. Как только первая "проснувшаяся" нить отпустит монитор, который все остальные ожидают, её участь повторит следующая нить (произвольная нить из состояния BLOCKED перейдет в состояние RUNNABLE). Это будет продолжаться до тех пор, пока все "пробужденные" нити не покинут состояния BLOCKED.Три нити в блоке synchronized вызвали
Две из них перейдут в состояние BLOCKED, одна в состояние RUNNABLEwait()у объекта-мютекса. В какое состояние перейдут эти нити, если четвертая нить вызоветnotifyAll()?Чем отличается
Несмотря на то, что иjoin(500)отwait(500)?join(500)иwait(500)переведут текущую нить в состояние TIMED_WAITING, между ними существенные различия:
join(500)вызывается у нити,wait(500)вызывается внутри синхронизированного блока у объекта, по которому данный блок синхронизирован.
При вызовеjoin(500)текущая нить будет ожидать 500 миллисекунд завершения нити, чей методjoin()был вызван.
При вызовеwait(500)текущая нить снимет блокировку с синхронизированного объекта, и засыпает на 500 миллисекунд.
Через 500 миллисекунд в обоих случаях нити продолжат работу.Чем отличается
wait(500)отsleep(500)?sleep(500)вызывается у нити,wait(500)вызывается внутри синхронизированного блока у объекта, по которому данный блок синхронизирован.
При вызовеsleep(500)текущая нить будет ожидать 500 милисекунд, затем продолжит свою работу.
При вызовеwait(500)текущая нить снимет блокировку с синхронизированного объекта, и засыпает на 500 миллисекунд.В какое состояние перейдет нить при вызове метода
При вызове методаyield()?yield()– текущая нить «пропускает свой ход» и java сразу переключается на выполнение следующей нити. Нить из состоянияrunningпереходит в состояниеready. Состояния running & ready – это подсостояния состояния RUNNABLE.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
зачеркивать