多线程的同步机制是通过“互斥锁”来实现的。当用synchronized关键词来修饰一个代码块或者方法时,表示必须在当前代码块执行完成,或进入sleep状态后,才能执行下一个代码块或者方法。
多线程的同步机制,主要用于解决,两个线程同时访问一个对象时,可能发生的数据不同步现象。
synchronized(lock),括号中的lock可以是任意对象,甚至是数组对象。简单来说,就是保证lock对象的一系列程序执行完毕后,再执行下面的代码。
为了增强可读性,可以直接把要访问的那个对象当成锁,
类似下面这样:
synchronized(key)
{
key.update(seed);
}
则可以一目了然地表明:大括号中要锁定的资源是key
对象
线程的同步机制,形象理解:
好比一间房子,如果是空的,就能进入使用里面的资源,并在里面把门反锁,此时别人无法进入。(保证了资源的独占使用)。此时有人想用房子,就得门口等着。。。
synchronized ( lock ) // 等待进入
{ // 进入,从里面反锁
… 使用资源res …
} // 出来