Ari*_*ule 5 java multithreading
关于并发运行的线程以及它们对对象的锁定,我只是有一个问题.据我所知,调用wait()方法的线程将进入等待列表,并允许来自阻塞列表的另一个线程接管锁定和对象(在同步代码中).如果现在对该对象具有锁定的此线程调用notify()方法,则它会唤醒调用wait()的线程,并将其移动到阻止列表.
调用notify()方法的线程会发生什么.它是否仍然锁定对象或现在是否在等待列表?
问候
只有一个线程可以保持对象的锁定.在wait()和notify()而线程持有调用这些方法的对象上的锁方法必须被调用; 如果他们不这样做(例如,因为你没有在对象上同步),你会得到一个IllegalMonitorStateException.
当你调用时wait(),线程放弃锁定并进入等待列表(停止执行).当wait()返回时,该线程将再次获得锁.但是,调用的线程notify()仍然保持锁定,因此等待线程将不会在通知线程退出synchronized块或方法之前恢复,以便释放对象的锁定.
通过调用notify()线程不会放弃对象的锁定.
一系列可能的事件将是:
synchronized块,获得对象的锁定wait()对象,放弃锁定,停止执行synchronized块,获得对象的锁定notify()该对象,但仍保持锁定synchronized块并释放锁定wait()| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |