Java并发之线程通讯

1.线程通信方式

        在并发编程中,需要理两个关键问题线程之如何通信及线程之如何同步(里的
线程是指并发执行的活动实体)。通信是指线程之以何种机制来交信息。在命令式
中,线程之的通信机制有两种:共享内存和消息传递
        在共享内存的并发模型里,线程之共享程序的公共状,通-内存中的公共状态进行式通信。在消息传递的并模型里,线程之没有公共状线程之过发送消息来显行通信。
        同步是指程序中用于控制不同线操作生相对顺序的机制。在共享内存并模型里,同步是显行的。程序须显式指定某个方法或某段代需要在线程之互斥行。在消息传递的并模型里,由于消息的送必在消息的接收之前,因此同步是行的。

2.Java并发采用的通信方式

        Java的并采用的是共享内存模型,Java线程之的通信行,整个通信对程序员完全透明。如果写多线程程序的Java程序不理解行的线程之通信的工作机制,很可能会遇到各种奇怪的内存可见问题
        在Java中,所有例域、静域和数元素都存在堆内存中,堆内存在线程之共享(本章用“共享术语代指例域,静域和数元素)。局部量(Local Variables),方法定义参数(Java范称之Formal Method Parameters)和异常理器参数(Exception Handler Parameters)不会在线程之共享,它不会有内存可问题,也不受内存模型的影响。
        Java线程之的通信由Java内存模型(本文JMM)控制,JMM决定一个线共享变量的写入何时对另一个线程可。从抽象的角度来看,JMM线程和主内存之的抽象关系:线程之的共享量存在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存中存该线程以/写共享量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了存、写冲区、寄存器以及其他的硬件和编译优化。
1线A把本地内存A中更新的共享量刷新到主内存中去。
2线B到主内存中去线A之前已更新的共享量。
        本地内存A和本地内存B由主内存中共享x的副本。假初始3个内存中的x0线A,把更新后的x(假设值为1临时存放在自己的本地内存A中。当线A线B需要通信线A首先会把自己本地内存中修改后的x刷新到主内存中,此时主内存中的x值变为1。随后,线B到主内存中去线A更新后的x,此时线程B的本地内存的x变为1
        从整体来看,这两个步骤实质上是线A在向线B送消息,而且个通信程必要经过主内存。JMM控制主内存与每个线程的本地内存之的交互,来Java程序提供内存可见性保
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值