美文网首页
java基础18-并发学习

java基础18-并发学习

作者: liwsh | 来源:发表于2021-08-16 19:31 被阅读0次

1.并发问题:可见性,原子性和有序性

cpu缓存会导致可见性,线程切换会导致原子性(count++不是原子的),编译优化会带来有序性问题(双重锁单例)

2.java如何解决可见性和有序性

禁用缓存和编译优化即可解决,但是会导致性能非常低,需要程序员告知jvm按需禁用。方法是volitale,synchronize,final三个关键字和6项happens-before原则

3.happens-before

前面操作的结果对后续操作可见,主要对编译器有如下6点约束
3.1程序顺序原则,一个线程中,按照程序顺序执行。比如:x=62;v=true。x=62的修改对v=true操作的时候可见
3.2 volitale变量原则,对一个volitale变量的写操作,后续的读操作都可见。
3.3 传递性,A happens-before B,B happens-before C,那么A happens-before C
如下例子A线程写,B线程读,最终结果X=42


image.png

3.4 管程中的锁
锁的解锁happens-before锁的加锁,管程是一种通用的同步原语,java中就是synchronize
3.5 线程start原则
A线程启动子线程B,子线程B可以看到A线程调用子线程B之前的操作
3.5 线程join原则
A线程调用B线程的join方法,B线程的执行动作对A线程可见

相关文章

  • java基础18-并发学习

    1.并发问题:可见性,原子性和有序性 cpu缓存会导致可见性,线程切换会导致原子性(count++不是原子的),编...

  • java并发线程的基础

    Java并发系列之java并发编程基础

  • 聊一聊对于java并发基础的认知(一)

    聊一聊对于java并发基础的认知(一)聊一聊对于java并发基础的认知(二) 前言 对于java并发程序,我们首先...

  • Java concurrent包源码走读(二)

    简介 AQS(AbstractQueuedSynchronizer)是Java并发工具基础,要掌握Java并发工具...

  • 高并发Java

    高并发Java(1):前言 高并发Java(2):多线程基础 高并发Java(3):Java内存模型和线程安全 高...

  • Java并发基础——理论篇

    Java并发基础之理论篇 很多朋友反馈说,对于没有Java并发基础就了解Java并发工具包,表示一脸茫然。那么从这...

  • Java并发之AQS原理

    本文是Java并发专题(欢迎大家关注)的一篇。以下是完整的目录:Java并发之基础知识Java并发之volatil...

  • Java 并发包提供了哪些并发工具类

    Java 并发包提供了哪些并发工具类 Java 基础并发工具类 提供了比 synchronized更加高级的各种同...

  • Java并发编程学习总结

    Java 并发基础知识 Java 并发的基础知识,可能会在笔试中遇到,技术面试中也可能以并发知识环节提问的第一个问...

  • 记录一些书籍

    JAVA 基础 《Java核心技术·卷1:基础知识》《Java核心技术 卷2:高级特性》《Java8 实战》 并发...

网友评论

      本文标题:java基础18-并发学习

      本文链接:https://www.haomeiwen.com/subject/sbzmbltx.html