Java多线程学习笔记(持续更新)

1 线程安全的核心在于对状态访问操作进行管理,尤其是共享的和可变的,所以可变对象尽量写在run方法内部

2 synchronized/volatile/显示锁/原子变量?/transient

3 多个线程访问同一个可变状态变量时没有合适的同步,三种方式可以同步:

(1)不在线程之间共享该状态变量

(2)将状态变量改为不可变的变量,要么final,要么new一个新对象?即使对象里所有域都是final类型,对象仍然可变,因为final类型的域中可以保存对可变对象的引用。final域能确保初始化过程的安全性,从而可以不受限制的访问不可变对象,并在共享这些对象时无须同步。

(3)在访问状态变量时使用同步

4 无状态对象一定是线程安全的,这里的状态指类的变量

5 当某个计算的正确性取决于多个线程的交替执行时序时,就会发生竞态条件,例如:延迟初始化

6 java.util.concurrent.atomic包包含了一些原子变量类,例如:通过用AtomicLong来代替long类型的计数器

7 要保持状态的一致性,就要在单个原子操作中更新所有相关的状态变量?

8 内置锁:@GuardBy("this")

9 当计算时间较长,一定不要有锁,例如:网络IO或控制台IO

10 对于非volatile类型的long和double变量,JVM允许将64位的读写操作分解为两个32位的操作,所以读写操作在不同的线程里执行,可能会读到某个值的高32位和另一个值的低32位

11 volatile的典型用法:检查某个某个状态标记以判断是否退出循环。可确保将变量的更新操作通知其他线程。加锁机制可同时确保内存可见性和原子性,而volatile只确保可见性。

12 this引用逸出?public getter方法会导致逸出?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,984评论 11 349
  • 并发编程简介 上古时期的计算机没有操作系统,它们从头到尾只运行一个程序。这个程序独占计算机上所有的资源。只有当一个...
    EakonZhao阅读 1,190评论 2 6
  • 基础知识 同步关键1、对共享状态的管理,保证对共享状态操作的原子性,避免静态条件。同步机制(****synchro...
    汪梓文阅读 1,518评论 0 2
  • D大在A市郊区。沿着永丰路一路向南,在右手边首先可以看到了D大的围墙东北角。继续向南行进,只见一道南北向围墙和这公...
    文青程序员阅读 307评论 0 0
  • AJ Baltes 教授是一名在北京大学深圳研究院教学的外教,他有5个学位,能教任何英语方面的知识,培养了很多优秀...
    零度冰阅读 944评论 5 12

友情链接更多精彩内容