synchronized关键字, 同步方法,类和代码块,主要是用于多线程环境下共享变量的排他访问。在多线程环境下,对一个共享变量的访问,必须得到该共享变量设定的排他锁,如果不遵守这样的约定,那么共享变量在多线程中进行修改其结果将是不可预测的,同时在进行monitor方法调用时将会抛出异常信息。
Object类中wait方法的作用:使调用线程进入该对象的等待队列中,在调用上必须先要获取Object对象实例的锁,才可以进行wait操作,否则将会抛出未获得对象锁的异常,当调用wait方法后,将调用线程放入对象的等待队列,并释放对象锁。wait和notify必须成对使用。
直到有其他线程调用Object对象实例的notify和notifyAll方法唤醒该等待线程。唤醒线程在调用上同样需要满足获得对象实例锁,调用对象实例的notify或者notifyAll。
或者
Object类中wait方法的作用:使调用线程进入该对象的等待队列中,在调用上必须先要获取Object对象实例的锁,才可以进行wait操作,否则将会抛出未获得对象锁的异常,当调用wait方法后,将调用线程放入对象的等待队列,并释放对象锁。wait和notify必须成对使用。
synchronized(object)
{
while(someConditionNotSatify)
{
try{
//make the calling thread await and release object's lock.
object.wait();
}
catch(InterruptedException e){}
}
// condition has been satified.
// do some task need to be synchronized
}
// do other task
直到有其他线程调用Object对象实例的notify和notifyAll方法唤醒该等待线程。唤醒线程在调用上同样需要满足获得对象实例锁,调用对象实例的notify或者notifyAll。
synchronized(object)
{
// do the task need to be synchronized
// dosomething to change waiting condition
//唤醒等待队列中的某个线程
object.notify();
}
//同步块结束,释放锁
// do other task
或者
synchronized(object)
{
// do the task need to be synchronized
// dosomething to change waiting condition
//唤醒等待队列中的所有等待线程
object.notifyAll();
}
//同步块结束,释放锁
// do other task