zoukankan      html  css  js  c++  java
  • JAVA ReentrantLock的使用

    源码如下

    对比synchronized,synchronized使用时会显示的指定一个对象(方法为调用对象,代码块会需要对象作为参数),来获取一个对象的独占锁

    而ReentrantLock可能就是使用的ReentrantLock对象的独占锁来实现锁的功能,所以不同线程要用同一个ReentrantLock对象来互斥

            public static void  main(String[] args){
                doSync();
            }
    
        private static void doSync() {
    
            MyThread myThread = new MyThread();
    
            new Thread(myThread).start();
    
            Thread tt = new Thread(myThread);
            tt.start();
            try {
                Thread.sleep(1000, 0);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("try interuppt ");
    
            tt.interrupt();
    
        }
    class MyThread implements Runnable{
        private         ReentrantLock lock = new ReentrantLock(); //用同一个lock对象来获取锁,实现互斥,申请的就是lock的锁
        @Override
        public void run() {
    
            try {
                System.out.println("try to wait");
                lock.lockInterruptibly();
                Thread.sleep(5000);
                //       this.wait();
                System.out.println("after wait");
                lock.unlock();
    
    
            } catch (InterruptedException e) {
                System.out.println("recv interrupt");
            }
    
        }
    }

    输出:

    try to wait
    try to wait
    try interuppt 
    recv interrupt
    after wait
  • 相关阅读:
    第32周二
    第32周一
    第31周日
    第31周六
    第31周五
    第31周四
    第31周三
    C++中this指针的使用方法.
    ArcPad 10 的安装部署
    UEditor用法
  • 原文地址:https://www.cnblogs.com/jiangz222/p/4722555.html
Copyright © 2011-2022 走看看