zoukankan      html  css  js  c++  java
  • 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 > 同步块(已经进入了方法体,分配了相应的资源) > 同步方法 (在方法体之外).

    刚刚参加工作,很有很多不懂不会的,发现错误,欢迎指正,谢谢!
  • 相关阅读:
    AJAX学习笔记
    JQuery 学习笔记-2017.05.22
    十二.GUI
    十一.文件
    十.模块和库
    九.类的进化(魔法方法、特性和迭代器)
    八.异常
    七.类的继承
    六.函数和类
    五.条件、循环和其他语句
  • 原文地址:https://www.cnblogs.com/xd-study/p/13194106.html
Copyright © 2011-2022 走看看