多线程开发中,经常会使用到锁,常见的有
- 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();
}
}
这种就直接锁住整个类,即使不同对象也是会被加锁