在Java语言中,每个对象都有一个对象锁与之关联,该锁表明一个对象在任何时候只能被一个线程拥有,当一个线程调用对象的一段snychronized代码时,会首先获取对象的锁,然后去执行相应的代码,执行完毕后,释放锁。
synchronized有两种用法(方法和代码块),还可用于静态方法,实例,类
synchronized方法 当一个方法体规模非常大时,使用同步方法会大大影响程序的执行效率,所以Java提供了同步块。synchronized块 synchronized(this){ }当使用synchronized来修饰某个共享资源的时候,如果线程A在执行同步代码,此时线程B也要执行同步代码,只能等线程A执行完毕。在这种情况下可以使用wait()方法,释放对象锁,进入等等待状态,并且可以调用notify()/notifyAll()唤醒其他线程,允许他们去获取锁。