前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android之synchronized介绍

android之synchronized介绍

作者头像
李小白是一只喵
发布2020-12-25 10:13:46
4680
发布2020-12-25 10:13:46
举报
文章被收录于专栏:算法微时光

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) { }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • synchronized(同步)
  • 使用实例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档