加入收藏 | 设为首页 | 会员中心 | 我要投稿 南昌站长网 (https://www.0791zz.cn/)- 终端安全、安全管理、数据治理、图像分析、大数据!
当前位置: 首页 > 站长资讯 > 评论 > 正文

边缘计算不再“边缘”

发布时间:2021-01-30 12:07:26 所属栏目:评论 来源:互联网
导读:1.2、作用范围 面试时经常会问: synchronized 关键字锁的是什么?或者说它的作用范围是什么? 总结一下: 非静态方法锁的是当前对象 (就是 this) 静态方法锁的是类对象 Test.class 代码块锁的是自定义的 Object 对象 1.3、原子性、可见性、有序性 我们都知道

1.2、作用范围

面试时经常会问:synchronized 关键字锁的是什么?或者说它的作用范围是什么?

总结一下:

  1. 非静态方法锁的是当前对象 (就是 this)
  2. 静态方法锁的是类对象 Test.class
  3. 代码块锁的是自定义的 Object 对象

1.3、原子性、可见性、有序性

我们都知道并发编程需要考虑三个问题:原子性、可见性、有序性。

那么,使用 synchronized 关键字是如何解决这三个问题的?

  • 原子性:synchronized 关键字能保证只有一个线程能拿到锁,能够进入同步代码块,不会出现原子性问题
  • 可见性:执行 synchronized 时,对应 lock 原子操作将会清空工作内存中此变量的值,并重新 read 来刷新内存,不会出现可见性的问题
  • 有序性:执行 synchronized 时,依然可能发生重排序,只不过,我们有同步代码块,可以保证只有一个线程执行同步代码中的代码,不会出现有序性问题

二、对象内存布局

上面说了,这三种方式都是锁的是对象、对象、对象(说三遍),但是听起来好像很抽象的样子,对象还能被锁?该如何操作?

其实是和对象内存布局有关系。

耳听为虚,眼见为实,下面让你亲眼看到对象是由啥组成的。

示例代码:
 

前言

大家好,我是狂聊。

今天来聊synchronized关键字,高频面试问题。

这篇文章构思 + 画图 + 文字花了好几天的时间,我已经彻底废了,看完希望你能有所收获。

话不多说,直接干货。

正文

一、synchronized的用法

1.1、三种使用方式

  1. 静态方法
  2. 非静态方法
  3. 代码块

代码示例:

 

(编辑:南昌站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读