synchronized与ReentrantLock的并发性能对比
程序员文章站
2022-07-06 08:30:32
为了证明某个面试官的错误言论,特意做了本实验。在面试中被问到,synchronized与ReentrantLock谁的性能好些?我答到,在少量并发下性能差不多,ReentrantLock相对好用些,但是在大量并发下synchronized性能要好些,结果面试官直接怼我说我记错了。话不多说直接上代码验证,用synchronized,ReentrantLock锁锁住一样的代码块,并对一个数执行自加的操作。synchronized锁代码块:class Sync implements Runn...
为了证明某个面试官的错误言论,特意做了本实验。
在面试中被问到,synchronized与ReentrantLock谁的性能好些?
我答到,在少量并发下性能差不多,ReentrantLock相对好用些,但是在大量并发下synchronized性能要好些,结果面试官直接怼我说我记错了。
话不多说直接上代码验证,用synchronized,ReentrantLock锁锁住一样的代码块,并对一个数执行自加的操作。
synchronized锁代码块:
class Sync implements Runnable {
private static volatile int num = 0;
@Override
public void run() {
synchronized ("") {
if (num == 0) {
System.out.println("Sync start:"+System.currentTimeMillis());
}
try {
Thread.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
++num;
if (num == Test.time) {
System.out.println("Sync end:"+System.currentTimeMillis());
}
}
}
}
ReentrantLock锁代码块:
class Lock implements Runnable {
private static volatile int num = 0;
private static ReentrantLock reentrantLock = new ReentrantLock();
@Override
public void run() {
reentrantLock.lock();
if (num == 0) {
System.out.println("Lock start:"+System.currentTimeMillis());
}
try {
Thread.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
++num;
if (num == Test.time) {
System.out.println("Lock end:"+System.currentTimeMillis());
}
reentrantLock.unlock();
}
}
测试代码:
public static void testSync() {
for (int i = 0; i < Test.time; i++) {
Thread syncThread = new Thread(new Sync());
Thread lockthread = new Thread(new Lock());
syncThread.start();
lockthread.start();
}
}
10个并发线程执行结果:
从执行结果来说并发线程较少的情形下,二者效率差不多,但是在实际使用中ReentrantLockantLock相对灵活些,支持tryLock、超时机制、公平锁和非公平锁,然而synchronized是由虚拟机决定,无超时机制,是非公平锁,可控性不强。
1000个线程并发执行结果:
在并发相对较高的情形下ReentrantLockantLock的获取锁效率相对较低,另外ReentrantLockantLock是自循锁,消耗CPU资源也比synchronized大。
本文地址:https://blog.csdn.net/u014267900/article/details/107370627
推荐阅读
-
c#中list.FindAll与for循环的性能对比总结
-
php+mysql prepare 与普通查询的性能对比实例讲解
-
c#中list.FindAll与for循环的性能对比总结
-
php+mysql prepare 与普通查询的性能对比实例讲解
-
i3和i5性能差多少?Intel i3与i5处理器的区别对比介绍
-
Windows XP与Vista的性能对比评测
-
i7-7740X和i7-7700K的区别是什么 i7-7740X与i7-7700K性能对比测试图解
-
synchronized与ReentrantLock实现共享资源的消费
-
i7-7700K和8700K性能差别大吗?i7-8700K与7700K的区别对比介绍
-
使用文件流与使用缓冲流完成文件的复制操作性能对比,文件流 FileInputStream FileOutputStream 缓冲流: BufferedInputStream BufferedOutputStream