现在的位置: 首页 > 综合 > 正文

Java中,有关当前线程的一些知识点

2013年10月14日 ⁄ 综合 ⁄ 共 622字 ⁄ 字号 评论关闭

当前线程的一些常用的方法:
wait(),wait(long),notify(),notifyAll()等方法是当前类的实例方法,

  • wait()是使持有对象锁的线程释放锁;
  • wait(long)是使持有对象锁的线程释放锁时间为long(毫秒)后,再次获得锁,wait()和wait(0)等价;
  • notify()是唤醒一个正在等待该对象锁的线程,如果等待的线程不止一个,那么被唤醒的线程由jvm确定;
  • notifyAll是唤醒所有正在等待该对象锁的线程.我们应该优先使用notifyAll()方法,因为唤醒所有线程比唤醒一个线程更容易让jvm找到最适合被唤醒的线程.

对于上述方法,只有在当前线程中才能使用,否则报运行时错误java.lang.IllegalMonitorStateException: current thread not owner.

synchronized和wait()、notify()等的关系:

  1. 有synchronized的地方不一定有wait,notify
  2. 有wait,notify的地方必有synchronized.这是因为wait和notify不是属于线程类,而是每一个对象都具有的方法,而且,这两个方法都和对象锁有关,有锁的地方,必有synchronized。

另外,请注意一点:如果要把notify和wait方法放在一起用的话,必须先调用notify后调用wait,因为如果调用完wait,该线程就已经不是current thread了。

抱歉!评论已关闭.