第一时间获取技术干货和业界资讯!

收费群和不收费群最大的区别不在于发广告本身,而是在于花这点时间是否值得发一个广告。

昨天我和群里的几个网友在讨论问题,有人担心数学不好,是不是真的就不能学编程。这个完全不对,但是学不好数学,想往深处发展就难。数学和编程紧密挂钩,只是很多人习惯了 API 调用,感觉不到吧了。比如,进制转换,排序等都是数学知识的体现,以及数学知识的应用。这在平常我们都是通过 API 调用来实现的,你只停留在表面,所以你可能在编程中体验不到数学的存在。


今天,我给大家讨论几个关于 Java 锁方面的面试题,看看能不能够难住到大家!

1、现有一个方法 a,内部代码如下所示:

请问上面的代码会发生重排序吗?

针对这个问题,很多人回答,代码1和代码2会发生重排序,代码3不会发生重排序,代码4和代码5会发生重排序。也有人说,代码3、4、5之间也会发生重排序。其实都不对,因为这个题本身就是错的。volatile 不能用在方法代码中,volitale 是成员变量修饰符。

2、如何保证一个共享变量的可见性?

这个题方法有多种。方案一、保证共享变量的可见性,使用 volatile 关键字修饰即可。方案二、保证共享变量是 private,访问变量使用set/get 方法,使用 synchronized 对方法加锁,此种方法不仅保证了可见性,也保证了线程安全。方案三、使用原子变量,例如,AtomicInteger 等。

3、long 类型在 32 位的机器上,会不会发生线程安全问题?

会发生。因为 long 是一个 64 位的数据类型。在 32 位 CPU 上执行写操作会被拆分成两次写操作。所以,就可能发生线程安全问题。

4、下面的代码是否线程安全?

非线程安全的。不能用 a 和 b 做为锁对象。这两个对象 a 是 Integer,b 是 String 都是不可变变对象,一但对他们进行赋值就会变成新的对象,加的锁就失效了。

最近特别忙,后面干货分享继续。还有大家想看那方面的知识点,可以留言评论,后面分享。

©著作权归作者所有:来自51CTO博客作者mob604756f06ed8的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 如何写出让大厂面试官满意的字符串复制函数(my_strcpy)?
  2. sonar+Jenkins 构建代码质量自动化分析平台
  3. 一键实现自动化部署(灰度发布)实践
  4. 2021-03-19:给定一个二维数组matrix,其中的值不是0就是1,返回全部由
  5. markdown基础语法使用
  6. rust异步库-tokio的一些资源限制
  7. vscode编辑器和markdown/Emmet语法的使用
  8. Visual Studio Code 编辑器
  9. 五款不错的Web前端开发工具,可以尝试一下!

随机推荐

  1. 复杂链表的复制——牛客offer
  2. Java图形化界面实例:
  3. jtable表头渲染器
  4. 无法从其他用户的crontab作业执行java程
  5. Visual Studio 2012本身都是已经支持Jque
  6. Web分页实现及实例演示(一)——subList()
  7. 程序主菜单之javascript完全模拟
  8. 再论javaIO之拷贝MP3(read方法返回int的原
  9. Java的Grizzly为缓冲区占用了大量内存?
  10. Kotlin:相当于KClass的getClass()。