Android锁机制汇总

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

  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();
        }
    }

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。