Lock锁

Lock锁

public class TestLock {
    public static void main(String[] args) {
        Test t1 = new Test();
        new Thread(t1).start();
        new Thread(t1).start();
        new Thread(t1).start();
    }
}
class Test implements Runnable{
    int ticketNums = 10;
    //定义lock锁
    private final ReentrantLock lock = new ReentrantLock();
    @Override
    public void run() {
        while (true){
        try {
            lock.lock();//加锁
                if (ticketNums > 0){
                    System.out.println(ticketNums--);
                }else {
                    break;
                }
        }finally {
            lock.unlock();//解锁
        }
        }
    }
}

synchronized锁和Lock锁对比:

  1. Lock锁是显式锁(需要手动开锁和关锁,不要忘记关锁),synchronized是隐式锁,出了作用域自动释放。

  2. Lock锁只锁代码块,syncronized锁有代码块锁和方法锁。

  3. 使用Lock锁,JVM将花费较少的是时间;来调度线程,效果更好。并且具有较好的扩展性。

  4. 优先使用顺序

    Lock > 同步块(已经进入了方法体,分配了相应的资源) > 同步方法 (在方法体之外).

刚刚参加工作,很有很多不懂不会的,发现错误,欢迎指正,谢谢!
原文地址:https://www.cnblogs.com/xd-study/p/13194106.html