Java并发
hyhy12580
已不再从事流程挖掘相关工作
展开
-
《Java并发编程》学习1——并发编程会遇到的挑战
1.上下文切换 创建线程和线程切换存在的开销。 减少上下文切换 ①无锁并发编程 ②CAS(Compare And Swap)算法,不需加锁 ③最少使用线程 ④协程:单线程中执行多任务 2.死锁 避免死锁 操作系统中的死锁预防、死锁避免和死锁检测 一锁一资源 定时锁(Java 5提供了更灵活的锁工具,可以显式地索取和释放锁。在索取锁的时候可以设定一个超时时间,如果超过这个时间还...原创 2019-08-13 18:11:37 · 102 阅读 · 0 评论 -
《Java并发编程》学习2——底层实现原理
1.volatile volatile关键字作用:Java内存模型确保了所有线程看到的被声明为volatile的字段的修改是一致的。 JVM层面:如果对volatile变量进行写操作,JVM会向处理发送一条Lock前缀的指令,使得这个变量所在的cache行的数据写回到内存中。 Lock前缀指令的执行会声言处理器的LOCK#信号,该信号确保在声言期间,处理器可以独占任何共享内存(锁住总线)。 ...原创 2019-08-17 19:01:40 · 94 阅读 · 0 评论 -
《Java并发编程》学习4——Java内存模型(JMM)②重排序
1.数据相关 数据相关:两个操作访问同一个变量,且其中一个操作是写操作,则这两个操作之间存在数据相关。 三种数据相关:写后读、写后写、读后写 △编译器和处理器在重排序时,不会改变存在数据相关的两个操作的执行顺序。这里的数据相关仅针对单个处理器中执行的指令序列和单个线程中执行的操作序列。 2.as-if-serial语义 as-if-seria语义:不管怎么重排序,(单线程)程序的执行结果...原创 2019-09-16 00:31:22 · 126 阅读 · 0 评论 -
《Java并发编程》学习3——Java内存模型(JMM)①JMM基础
1.线程通信和线程同步 线程通信和线程同步是并发编程中需要处理的两个关键问题。 线程通信 在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 在共享内存的并发模型中,线程共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。 在消息传递的并发模型中,线程之间没有公共状态,线程之间必须通过发送消息和接收消息来显式进行通信。 线程同步 同步指程序中用于控制不同线程间操作...原创 2019-09-16 00:05:34 · 107 阅读 · 0 评论 -
《Java并发编程》学习5——Java内存模型(JMM)③顺序一致性
1.数据竞争 数据竞争:在一个线程中写一个变量,在另一个线程中读同一个变量,而且写和读没有通过同步来排序。数据竞争出现的原因就是成为未正确同步。 顺序一致性:顺序一致性是一种理想的内存模型。如果程序是正确同步的,程序的执行将具有顺序一致性——即程序的执行结果与该程序在顺序一致性内存模型中得执行结果相同。 2.顺序一致性内存模型 顺序一致性内存模型的两大特性: ①一个线程中的所有操作必须按...原创 2019-09-16 17:12:24 · 192 阅读 · 0 评论