您的位置:首页 > 其它

ReentrantLock中公平锁与非公平锁的效率对比

2017-08-31 13:08 459 查看
程序逻辑如下:开20个线程,共享一个static的int变量race,每个线程所做的事情只有一个:将race自增十万次。同时,使用参数-XX:+PrintGCDetails显示JVM的GC情况

具体代码如下:

public class Test {
public static volatile int race=0;
public static ReentrantLock lock = new ReentrantLock(false);
public static void increase(){
lock.lock();
race++;    //变量自增操作
lock.unlock();
}
private static final int THREADS_COUNT=20;
public static void main(String[]args){
AtomicReference<Thread> sign =new AtomicReference<>();
Thread[]threads=new Thread[THREADS_COUNT];  //定义20个线程
for(int i=0;i<THREADS_COUNT;i++){
threads[i]=new Thread(new Runnable(){
@Override
public void run(){
for(int i=0;i<100000;i++){
increase();
}
}
});
threads[i].start();
}//等待所有累加线程都结束
while(Thread.activeCount()>1) {
Thread.yield();
}
System.out.println(race);
}
}


实践证明,高并发情况下公平锁效率比非公平锁效率低了十倍以上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: