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

    刚刚参加工作,很有很多不懂不会的,发现错误,欢迎指正,谢谢!
  • 相关阅读:
    Kafka Kerberos客户端访问
    Kafka Kerberos服务端配置
    Centos安装Kafka
    aaaaaaaaaaaa
    Kafka队列消息和发布订阅消息
    RabbitMQ概念
    RabbitMQ使用
    windows下安装Erlang
    RabbitMQ简介
    Flume简介
  • 原文地址:https://www.cnblogs.com/xd-study/p/13194106.html
Copyright © 2011-2022 走看看