Object类下的方法: java 所有类都是Object的子类。。。 所以每个对象都可以上锁 唤醒wait()和notify()
1. getClass()
2. hashCode()
3. equals()
4. toString()
5. clone()
6. wait()...
7. notify()
8. notifyAll()
9. finalize()
wait()和notify()方法是Object类中的两个方法。
除了使用synchronized关键字来协调线程之间的执行状态,还可以使用这两个方法以另外一种方式来协调线程。这两个方法是非静态的,因为这两个方法是Object类中的方法,所以通过继承,Java中所有的实例都可以调用这两个方法。
wait()方法:它让执行此代码的线程进入挂起状态。如果在处于挂起状态时,因为某些原因挂起被打断了,那么该方法就会抛出一个InterruptedException的异常,这个异常和sleep方法抛出的异常是同一个类型。
notify()方法:唤醒因为在同一个对象上调用wait()而处于挂起状态的线程,让线程可以继续执行下去。
同一个对象:因为在同一个对象上调用wait()方法而进入等待状态的线程,只能由另一个线程在同一个对象上调用notify方法来唤醒。举例来说,obj是一个指向类Object的实例的引用,线程1调用obj.wait()方法而进入挂起状态,
如果想唤醒这个线程,只能够在指向同一个类Object实例上调用notify方法才可以 调用方法的要求:必须在获得一个对象的锁的代码内部才能调用这个对象的wait()或者notify()方法。也就是说,如果要调用一个对象的wait()或者notify()方法,那么就首先需要使用synchronized代码块获得这个对象的锁,否则程序将抛出一个IllegalMoniterStateException异常。
当调用wait()方法后线程马上释放对象的对象锁。
|