美文网首页
验证锁的存在

验证锁的存在

作者: setone | 来源:发表于2018-10-11 16:13 被阅读0次

    synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。它包括两种用法:synchronized 方法和 synchronized 块

    image.png

    打上断点,多次请求这个方法,我们加上锁了,在这个断点处按f8跑完,synchrronize如果生效你就会感受到明显的停顿后才会进入断点,去掉synchrronize后,多次请求这个方法,是不能在断点处感受到明显的停顿,就证明没有加锁

    lock是jdk1.5出的一个接口

    @Slf4j
    public class AddressControllerTest  {
    
        
         private Lock lock = new ReentrantLock();
    
            //需要参与同步的方法
            private void method(Thread thread){
                lock.lock();
                try {
                    log.info("线程名"+thread.getName() + "获得了锁");
                }catch(Exception e){
                    e.printStackTrace();
                } finally {
                     log.info("线程名"+thread.getName() + "释放了锁");
                    lock.unlock();
                }
            }
    
            public static void main(String[] args) {
                AddressControllerTest lockTest = new AddressControllerTest();
    
                //线程1
                Thread t1 = new Thread(new Runnable() {
    
                    @Override
                    public void run() {
                        lockTest.method(Thread.currentThread());
                    }
                }, "t1");
    
                Thread t2 = new Thread(new Runnable() {
    
                    @Override
                    public void run() {
                        lockTest.method(Thread.currentThread());
                    }
                }, "t2");
    
                t1.start();
                t2.start();
            }
    }
    

    运行结果

    线程名t1获得了锁
    线程名t1释放了锁
    线程名t2获得了锁
    线程名t2释放了锁
    

    拿到锁才有执行权

    相关文章

      网友评论

          本文标题:验证锁的存在

          本文链接:https://www.haomeiwen.com/subject/lwpbaftx.html