除了同步,同步方法外,还可以使用同步代码块,有时候,同步代码块会带来比同步方法更好的效果。
追其同步的根本目的,是控制竞争资源的正确访问,因此只要再访问竞争资源的时候,保证同一时刻只能有一个线程访问即可,因此java引入了同步代码块的测量,以提高性能。
synchronized(this){
需要同步的操作
}
在使用synchronized关键字时,应该尽可能避免在synchronized方法或synchronized块中使用sleep或者yield方法,因为在synchronized程序中占有对象锁,你休息那么其他 的线程只能以便等着你醒来完了才能执行,不但严重影响效率,也不符合逻辑。
同样在同步的程序块内,调用yeild方法让出cpu资源也没有意义,你占用着锁,其他互斥的线程还是无法访问同步程序块,当然和同步程序块的线程可以获得跟多的执行时间。