并发预备知识

并发概念:

当拥有多个线程时,程序在单核处理器上运行时,多个线程交替进入内存中,多核处理器上,每个线程都将分配到一个处理器上,是可以同时运行的 

cpu多级缓存:

内存和高速缓存都连接在系统总线上

因为cpu的读取速度太快,所以要通过高速缓存来协调,避免造成资源浪费(结构:cpu->cache->memory)

cache存在的意义:缓存要远远小于主存

    1.时间局部性:如果某个数据被访问,那么在不久的将来他很有可能再次被访问

    2.空间局部性:如果某个数据被访问,那么与他相邻的数据很有可能很快被访问

 

MESI协议:保证多个CPU cache之间缓存共享数据的一致

MESI代表四种状态  

M:modify被修改       它中存储的是该CPU已经修改过的东西(此时内存中的数据还没有被修改),需要返回给内存,返回的时间就是在其他的缓存访问内存之前 在写入内存后,它的状态将变为独享状态

E:Exclusive独享   它中的数据与内存中的数据一致,当有CPU读取时变为共享状态,当有CPU要修改时变为被修改状态

S:share共享   它与主存中的数据是一致的,可以多个CPU同时访问,但如果有一个CPU对其进行修改,那么这个他将转为M,在其他未修改的CPU中转为I状态

I:invalid无效的   无效的

四种操作:

local read: 读本地缓存

local write:向本地写

remote  read:从内存中读

remote write:从内存中写

 

乱序执行优化:处理器为了提高运算速度而做出违背代码原有顺序的优化

 

Java内存模型:JMM

 

它规定了一个线程如何,何时可以看到其他线程修改过后的共享变量的值,怎样同步共享变量

堆(Heap):在运行时自动分配内存,但是读取速度慢

栈(Stack):存取速度快

本地变量都是存放在线程栈上的,对象是放在堆中的

当两个线程同时访问一个对象的,每个线程会获得一个该对象的私有拷贝

 

内存模型的八种操作:

lock(锁定):作用于主内存变量,把一个变量标识为一条线程的独占状态

unlock(解锁):作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量才可被其他线程锁定

read(读取):作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load动作使用

load(载入):作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中

use(使用):作用于工作内存的变量,把工作内存中的一个变量的值传递给执行引擎

assign(赋值):作用于工作内存的变量,它把一个从执行引擎接收到的值赋值给工作内存的变量

store(存储):作用于工作内存的变量,把工作内存中的一个变量的值送到主内存中,以便随后的write操作

write(写入):作用于主内存的变量,它把store操作从工作内存中一个变量的值传送到主内存的变量中

 

同步规则:

1.如果要把一个变量从主内存中复制到工作内存,就需要按顺序地执行read和load操作,如果把变量从工作内存中同步回主内存中,就要按顺序执行store和write操作,但java内存模型只要求上述操作必须按顺序执行,并没有说要是连续执行的(这里就可以看出,java多线程的执行时会出现不安全问题 )

2.不允许read和load,store和write操作之一单独出现

 3.不允许一个线程丢弃它的最近assign操作,即变量在工作内存中改变之后必须同步到主内存中 

4.不允许一个线程无原因的(没有发生任何assign操作)把数据从工作内存同步回主内存中(这里可能是说明再非特殊情况下,执行引擎是不能直接和主内存进行数据交换的)

5.一个新的变量只能诞生在主内存中,不允许工作内存中直接使用一个未被初始化(load或assign)的变量,即就是对一个变量实施use和store操作之前,必须先执行过了assign和load操作(这里的意思就是在新变量被初始化后要进行赋值,赋值操

作需要进入到工作内存中让执行引擎来操作,最后返回)

6.一个变量在同一时刻值允许一条线程对其进行lock操作,但lock操作可以被同一条线程重复执行多次,但需要相应执行次数的unlock操作,变量才会被解锁,lock和unlock必须成对出现

7.如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前需要重新执行load或assign操作初始化变量的值

8.如果一个变量事先没有被lock锁定,那就不能对他实行unlock,也不允许去unlock一个被其他线程锁定的变量

9.对一个变量执行unlock之前,必须把此变量同步到主内存中(执行store和write操作)

 

并发的优势与风险:

优势:同时处理多个请求,响应更快。复杂的操作可以分成多个进程同时进行,程序设计在某些情况下更简单,CPU能在等待IO时做一些其他的事情

风险:多个线程共享数据时可能会产生期望不符的结果,会出现死锁,饥饿问题,CPU切换频繁,调度时间增加,内存消耗

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java并发核心知识体系是指在Java编程语言中,用于处理多线程编程的一系列核心知识和技术。Xmind是一种思维导图工具,可以帮助我们清晰地组织和呈现这些知识体系。 Java并发核心知识体系包括以下内容: 1.线程基础知识:了解线程概念、线程创建和启动、线程状态转换等基本概念和操作。 2.线程安全:学习如何确保多个线程访问共享资源时的线程安全性,如使用锁、同步关键字、volatile关键字等。 3.锁和同步:深入研究各种锁的实现原理,比如synchronized关键字、ReentrantLock、ReadWriteLock等,并学习如何正确使用它们。 4.并发集合:了解Java中提供的线程安全的集合类,如ConcurrentHashMap、CopyOnWriteArrayList等。 5.线程通信:学习线程之间的协作和通信,包括使用wait()、notify()、notifyAll()等方法实现等待、通知机制。 6.线程池:学习如何使用线程池来管理和调度线程,提高线程的执行效率和资源利用率。 7.并发工具类:研究一些常用的并发工具类,如Semaphore、CountDownLatch、CyclicBarrier等。 8.原子操作:了解Java提供的原子操作类,如AtomicInteger、AtomicLong等,可以保证某些操作的原子性。 9.并发模型:掌握几种常用的线程并发模型,如生产者消费者模型、读写者模型等。 Xmind可以帮助我们将以上知识整理成一张思维导图,以便更好地理解和记忆。我们可以用中心主题为“Java并发核心知识体系”,然后分支出各个子主题,如“线程基础知识”、“线程安全”、“锁和同步”等,再进一步细分为各个具体的知识点。通过这样清晰的组织结构,我们可以更加系统地学习和理解Java并发编程的核心知识。 ### 回答2: Java并发核心知识体系精讲xmind是一份专门用于讲解Java并发编程的思维导图。它通过图形化的方式系统地呈现了Java并发编程的核心知识,方便学习者理解和记忆。以下是对Java并发核心知识体系精讲xmind的回答: Java并发核心知识体系精讲xmind是一份非常有价值的学习资料,它对Java并发编程的相关知识进行了详细的整理和总结。通过该xmind文件,学习者可以快速了解并发编程的基本概念、原理和常用工具类,深入了解多线程、线程安全和锁机制等重要的内容。 该xmind文件首先介绍了并发编程的基本概念,如进程、线程和并发的概念,并讲解了线程的生命周期和线程的创建、启动、暂停、终止等操作。接着,该文件详细讲解了Java提供的并发编程的核心类,包括Thread、Runnable、Callable、Lock、Condition等,以及线程池和计数器等常用的并发工具类。 该xmind文件还深入讨论了Java并发编程中的一些重点内容,比如线程安全、原子性、可见性和有序性等问题。它解释了线程安全的概念,以及Java中如何实现线程安全,如使用同步机制、锁机制和原子类等方式。此外,该文件还介绍了线程间的通信方式,包括共享内存和消息传递。 在最后,该xmind文件还介绍了一些高级的并发编程技术,比如并发集合类、并发控制和并发算法等。它详细讲解了Java中提供的并发集合类,如ConcurrentHashMap和ConcurrentLinkedQueue等,并解释了它们的设计原理和使用方法。此外,该文件还介绍了一些常见的并发控制和并发算法,如信号量和读写锁等。 综上所述,Java并发核心知识体系精讲xmind是一份非常有价值的学习资料,对于掌握Java并发编程知识和提高多线程编程能力非常有帮助。通过系统地学习该xmind文件,可以更好地理解并发编程的原理和应用,提高并发编程的技术水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值