Android锁机制汇总

时间:2021-7-21 作者:qvyue

多线程开发中,经常会使用到锁,常见的有

  1. synchronized, 普通函数
    class Test {
        synchronized public void test1() {
            Log.i("tag", "test1");
        }
        synchronized public void test2() {
            Log.i("tag", "test2");
        }
    }

这种属于对象锁,只能对同一对象才起作用

    void test() {
        Test test = new Test();
        test.test1();
        test.test2();
    }

这样使用会有作用,但是如果是不同对象,那就不生效

    void test() {
        Test test = new Test();
        test.test1();
        Test test1 = new Test();
        test1.test2();
    }

静态方法使用,这种是属于类锁,跟对象不同的是,不同对象使用也会起作用

    synchronized static public void test1() {
        Log.i("tag", "test1");
    }
    synchronized static public void test2() {
        Log.i("tag", "test2");
    }

代码块的使用,可以是对象锁也可以是类锁,看看传入的是什么

    void test() {
        synchronized (this) {
            test();
        }
    }

这种是对象锁,只有当前this这个对象才起作用

    void test() {
        synchronized (Test.class) {
            test();
        }
    }

这种就直接锁住整个类,即使不同对象也是会被加锁

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。