Java的内置锁一直都是备受争议的。
在JDK1.6之前,synchronized这个重量级锁的性能一直都是较为低下;
虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchronized还是存在一些缺陷的;
synchronized提供了便捷性的隐式获取锁、释放锁机制(基于JVM机制),但是它却缺少了获取、释放锁的可操作性、可中断、超时获取锁,且它为独占式在高并发场景下性能大打折扣。
实现自己的同步锁
【先来看看这个栗子】在一个不加锁的情况下,多个线程对同一个资源的操作(如下代码),我们期望在程序执行结束后,能够输出打印结果sum为20000
public class testDemo {
//为了略缩行数,压缩了部分代码格式
volatile int sum=0;//统计的值
public void sum(){
for(int i=0;i<=9999;i++) sum = sum + 1;}
public static void main(String[] args){
testDemo testDemo = new testDemo();
Thread t1 = new Thread(()->testDemo.sum());
Thread t2 = new Thread(()->testDemo.sum());
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(testDemo.sum