做网站线,哈尔滨营销型网站建设,网站建设要如何选择,wordpress弄个人博客好所谓的偏向#xff0c;就是偏心#xff0c;即锁会偏向于当前已经占有锁的线程 。
大部分情况是没有竞争的#xff08;某个同步块大多数情况都不会出现多线程同时竞争锁#xff09;#xff0c;所以可以通过偏向来提高性能。即在无竞争时#xff0c;之前获得锁的线程再次获…所谓的偏向就是偏心即锁会偏向于当前已经占有锁的线程 。
大部分情况是没有竞争的某个同步块大多数情况都不会出现多线程同时竞争锁所以可以通过偏向来提高性能。即在无竞争时之前获得锁的线程再次获得锁时会判断是否偏向锁指向我那么该线程将不用再次获得锁直接就可以进入同步块。
偏向锁的实施就是将对象头Mark的标记设置为偏向并将线程ID写入对象头Mark
当其他线程请求相同的锁时偏向模式结束
JVM默认启用偏向锁 -XX:UseBiasedLocking
在竞争激烈的场合偏向锁会增加系统负担每次都要加一次是否偏向的判断 代码例子 public class TestUseBisaedUsing {public static ListInteger numberList new VectorInteger();public static void main(String[] args) throws InterruptedException {long begin System.currentTimeMillis();int count 0;int startnum 0;while (count 10000000) {numberList.add(startnum);startnum 2;count;}long end System.currentTimeMillis();System.out.println(end - begin);}Vector是一个线程安全的类内部使用了锁机制。每次add都会进行锁请求。上述代码只有main一个线程再反复add请求锁。
使用如下的JVM参数来设置偏向锁
-XX:UseBiasedLocking -XX:BiasedLockingStartupDelay0
BiasedLockingStartupDelay表示系统启动几秒钟后启用偏向锁。默认为4秒原因在于系统刚启动时一般数据竞争是比较激烈的此时启用偏向锁会降低性能。
由于这里为了测试偏向锁的性能所以把延迟偏向锁的时间设置为0。
可以看到运行时间为423ms 下面关闭偏向锁
-XX:-UseBiasedLocking 输出699ms 一般在无竞争时启用偏向锁性能会提高5%左右。