android之synchronized介绍

2020-12-25 10:13:46 浏览数 (1)

image.png

synchronized(同步)

什么是同步,就是让Object 象同一时间只能被一个 Thread 读写。

如何实现呢?

就是给每个 Object 里面加一把锁,哪个 Thread 在使用这个 Object 就把这个对象上的锁给谁,直到这个 Thread 执行完对这个 Object 的操作,把 Object 上的锁还给这个 Object ,然后下一个 Thread 才能对这个 Object 进行操作

synchronized 干的事就是这样,管理对象上锁,只给一个线程对象,保证同一时刻只有一个线程能操作这个对象。

Synchronized,它就是一个:非公平,悲观,独享,互斥,可重入锁。

优化以后,是基于JVM内部实现,可以根据竞争激烈程度,从偏向锁-->轻量级锁-->重量级锁升级。

使用实例

synchronized 本身是一个关键字,用来修饰普通方法,静态方法和代码块。

修饰代码块 synchronized后跟括号,括号里是变量,这样,一次只有一个线程进入该代码块.此时,线程获得的是成员锁。

代码语言:javascript复制
public   int  synMethod( int  a1) {
    synchronized(a1) {
     //一次只能有一个线程进入 
    } 
}

修饰方法 放在范围操作符(public等)之后,返回类型声明(void等)之前.

这时,线程获得的是成员锁,即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线程才能进入.

代码语言:javascript复制
 public  synchronized  void  synMethod()  {}

修饰对象 synchronized后面括号里是一对象,此时,线程获得的是对象锁.

代码语言:javascript复制
synchronized(ArrayWithLockOrder.class) { }

0 人点赞