身为JAVA工作者必须了解的实战知识(二)
博客专区 > 叶荷 的博客 > 博客详情
身为JAVA工作者必须了解的实战知识(二)
叶荷 发表于3个月前
身为JAVA工作者必须了解的实战知识(二)
  • 发表于 3个月前
  • 阅读 1
  • 收藏 0
  • 点赞 0
  • 评论 0

一、可见性

什么是可见性?

Java线程安全需要防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且需要确保当一个线程修改了对象的状态后,其他线程可以看到发生的状态变化。 后者就是可见性的描述即多线程可以实时获取其他线程修改后的状态。

*** 待补充   两个工人同时记录生产产品总数问题

1. 失效数据

可见性出现问题就是其他线程没有获取到修改后的状态,更直观的描述就是其他线程获取到的数据是失效数据。

2. 非原子64位操作

3. 加锁与可见性

例如在一个变量的读取与+1上添加一把锁,锁保证了其他线程获取到此变量都是+1后的值,所以可以保证可见性。

4. Volatile变量

线程对共享变量的修改,对其他线程可见

满足以下条件,使用Volatitle:

对变量的写入操作不依赖变量的当前值,或者你能确保只有单个线程更新变量的值。

该变量不会与其他状态变量一起纳入不变形条件中。

在访问变量时不需要加锁。

二、发布 、逸出

发布一个对象的意思是指,使对象能够在当期作用域之外的代码中使用。

简单的可以理解为其他地方获取到当前类的对象,这种情况就是发布当前类。

Java多线程不仅要确保当前类是线程安全的,而且需要保证使用当前类对象的所有地方都要保证线程安全性。

三、封装

线程封闭 - 把共享的数据,仅在线程中使用,不共享.例如java的ThreadLocal类

Ad-hoc线程封闭 -- 维护线程封闭性的职责完全由程序实现承担.(很脆弱)

线程封闭 - 通常将特定子系统实现为一个单线程子系统

栈封闭

线程封闭的特例, 例如基本类型的局部变量

ThreadLocal - 通常防止可变的单实例对象 或 全局变量进行共享.

四、不可变

final对象,本身不可改变,但是final中的变量却可以改变

五、安全发布方式:

1. 静态初始化函数中初始化一个对象引用

2. 将对象的引用保存到volatile类型的域或者AtomicReference对象中

3. 将对象的引用保存到某个正确的构造对象的final类型域中

4. 将对象的引用保存到一个由锁保护的域中

java并发编程(二): 对象的共享

探索并发编程(三)------Java存储模型和共享对象

同步和Java内存模型 (三)可见性

以上就是我推荐给Java开发者们的一面试经典知识。但是这些知识里面并没有太多Java全栈、Java晋阶、JAVA架构之类的题,不是我不推荐,而是希望大家更多的从基本功做起,打好基础,太多复杂的内容一会儿也说不明白。

好了同学们,我能介绍的也都全部介绍完给你们了,如果下获得更多JAVA教学资源,可以选择来我们这里共同交流,群:240448376,很多大神在这里切磋学习,不懂可以直接问,晚上还有大牛免费直播教学。

注:加群要求

1、具有一定工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加,有些应届生和实习生也可以加。

2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。

3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加。

4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。

5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!

PS:现在主要讲解的内容是(反射原理枚举原理与应用注解原理常用设计模式、正规表达式高级应用、JAVA操作Office原理详解JAVA图像处理技术,等多个知识点的详解和实战)

6.小号或者小白之类加群一律不给过,谢谢。

最后,每一位读到这里的网友,感谢你们能耐心地看完。觉得对你有帮助可以给个喜欢!希望在成为一名更优秀的Java程序员的道路上,我们可以一起学习、一起进步

共有 人打赏支持
粉丝 0
博文 24
码字总数 41519
×
叶荷
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: