美文网首页
验证锁的存在

验证锁的存在

作者: 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释放了锁

拿到锁才有执行权

相关文章

  • 验证锁的存在

    synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查...

  • day39-并发编程之多线程2

    一、GIL锁相关 验证GIL锁的存在方式 对于cpython解释器 在单核情况下: 开多线程还是开多进程?不管干什...

  • 针对VSS死锁的改进措施

    1, 将读写锁换成互斥锁。(需验证) 2, 将s_pvc_sessions换成线程安全容器。(需验证) 3,将流中...

  • MySQL--锁

    MySQL 锁 锁的类型 行锁粒度最小的锁,存在死锁。 页锁粒度在行锁和表锁之间的锁。 表锁粒度较大的锁,不存在死...

  • 缓存锁的一个思路(代码未验证)

    缓存锁的一个思路(代码未验证)

  • 2018-07-15

    验证基本结构 这个样子 常规验证helper分类 一、存在 VS 不存在 1、presence 存在2、absen...

  • 常见验证码的漏洞

    验证码保存在网页源代码中 验证码保存在cookie中 验证码请求后没有及时销毁刷新 ....... . ........

  • 单例模式

    内部静态类 双锁验证 防止指令重排序 枚举

  • 验证Cache Miss的存在

    [toc] Posted by 微博@Yangsc_o 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 |...

  • (十三)Java锁细节整理

    一、JDK8存在的锁 二、锁的特性 三、开发难度+总结 四、synchronized详析 一、JDK8存在的锁 s...

网友评论

      本文标题:验证锁的存在

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