当前位置: 首页 > news >正文

河南网站设计微信网站入口

河南网站设计,微信网站入口,财经资讯网站该怎么做推广,重庆欧勒精细陶瓷有限公司网站策划书1、并发模型编程的分类 在并发模型编程中#xff0c;我们需要解决两个关键问题#xff1a;线程之间如何通信以及线程之间如何同步。线程之间的通信包括两种#xff1a;共享内存和消息传递。 Java并发采用的是共享内存模型。 2、Java内存模型的抽象 Java内存模型的主要目标是…1、并发模型编程的分类   在并发模型编程中我们需要解决两个关键问题线程之间如何通信以及线程之间如何同步。线程之间的通信包括两种共享内存和消息传递。   Java并发采用的是共享内存模型。 2、Java内存模型的抽象   Java内存模型的主要目标是定义程序中各个变量的访问规则即在虚拟机中将变量存储到内存和从内存中取出变量这样底层细节。此处的变量与Java编程时所说的变量不一样指包括了实例字段、静态字段和构成数组对象的元素但是不包括局部变量与方法参数后者是线程私有的不会被共享。   Java内存模型中规定了所有的变量都存储在主内存中每条线程还有自己的工作内存可以与前面将的处理器的高速缓存类比线程的工作内存中保存了该线程使用到的变量到主内存副本拷贝线程对变量的所有操作读取、赋值都必须在工作内存中进行而不能直接读写主内存中的变量。不同线程之间无法直接访问对方工作内存中的变量线程间变量值的传递均需要在主内存来完成线程、主内存和工作内存的交互关系如下图所示。 3 、内存间交互操作   关于主内存与工作内存之间的具体交互协议即一个变量如何从主内存拷贝到工作内存、如何从工作内存同步到主内存之间的实现细节Java内存模型定义了以下八种操作来完成 lock锁定作用于主内存的变量把一个变量标识为一条线程独占状态。unlock解锁作用于主内存变量把一个处于锁定状态的变量释放出来释放后的变量才可以被其他线程锁定。read读取作用于主内存变量把一个变量值从主内存传输到线程的工作内存中以便随后的load动作使用load载入作用于工作内存的变量它把read操作从主内存中得到的变量值放入工作内存的变量副本中。use使用作用于工作内存的变量把工作内存中的一个变量值传递给执行引擎每当虚拟机遇到一个需要使用变量的值的字节码指令时将会执行这个操作。assign赋值作用于工作内存的变量它把一个从执行引擎接收到的值赋值给工作内存的变量每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作。store存储作用于工作内存的变量把工作内存中的一个变量的值传送到主内存中以便随后的write的操作。write写入作用于主内存的变量它把store操作从工作内存中一个变量的值传送到主内存的变量中。  如果要把一个变量从主内存中复制到工作内存就需要按顺寻地执行read和load操作如果把变量从工作内存中同步回主内存中就要按顺序地执行store和write操作。Java内存模型只要求上述操作必须按顺序执行而没有保证必须是连续执行。也就是read和load之间store和write之间是可以插入其他指令的如对主内存中的变量a、b进行访问时可能的顺序是read aread bload b load a。Java内存模型还规定了在执行上述八种基本操作时必须满足如下规则 不允许read和load、store和write操作之一单独出现不允许一个线程丢弃它的最近assign的操作即变量在工作内存中改变了之后必须同步到主内存中。不允许一个线程无原因地没有发生过任何assign操作把数据从工作内存同步回主内存中。一个新的变量只能在主内存中诞生不允许在工作内存中直接使用一个未被初始化load或assign的变量。即就是对一个变量实施use和store操作之前不许先执行过了assign和load操作。一个变量在同一时刻只允许一条线成对其进行lock操作lock和unlock必须成对出现如果对一个变量执行lock操作将会清空工作内存中此变量的值在执行引擎使用这个变量前需要重新执行load或assign操作初始化变量的值如果一个变量事先没有被lock操作锁定则不允许对它执行unlock操作也不允许去unlock一个被其他线程锁定的变量。对一个变量执行unlock操作之前必须先把次变量同步到主内存中执行store和write操作。4、 重排序   在执行程序时为了提高性能编译器和处理器经常会对指令进行重排序。重排序分成三种类型 编译器优化的重排序。编译器在不改变单线程程序语义放入前提下可以重新安排语句的执行顺序。指令级并行的重排序。现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性处理器可以改变语句对应机器指令的执行顺序。内存系统的重排序。由于处理器使用缓存和读写缓冲区这使得加载和存储操作看上去可能是在乱序执行。从Java源代码到最终实际执行的指令序列会经过下面三种重排序 为了保证内存的可见性Java编译器在生成指令序列的适当位置会插入内存屏障指令来禁止特定类型的处理器重排序。Java内存模型把内存屏障分为LoadLoad、LoadStore、StoreLoad和StoreStore四种 5、 原子性、可见性与有序性  原子性哪些指令必须是不可分割的。在Java内存模型中这些规则需声明仅适用于-—实例变量和静态变量也包括数组元素但不包括方法中的局部变量-—的内存单元的简单读写操作。 /** * 非线程安全原子性 * author Snway * */ public class Atomicity { private int value; public int getNextValue() { return value; // 非原子操作包含三个操作即读取value将value加1并将计算结果写入value } }    在Atomicity类中如果执行时机不对那么两个线程在调用getNextValue时会得到相同的值。如图下所示给出了这种错误情况。虽然递增运算value看上去是单个操作但事实上它包含三个独立的操作读取value将value1并将计算结果写入value。由于运行时可能将多个线程之间的操作交替执行因此这两个线程可能同时执行读操作从而使它们得到相同的值并都将这个值加1.结果就是在不同线程的调用中返回了相同的数值。 解决方法        1、在声明方法getNextValue()加上锁即public synchronized int getNextValue()        2、采用原子变量类,如 public class Atomicity { private AtomicInteger value new AtomicInteger(0); public int getNextValue() { return value.incrementAndGet(); } } 可见性是关于在哪些情况下一个线程执行的结果对另一个线程是可见的问题。比如一个共享变量被加载到工作内存中并修改可见性要求这个修改是对所有线程可见比如在A线程中 一个变量更新了那么这种更新就会反映到其他线程中。通过volatile修饰可以实现。 有序性一个运算赋值操作并不是一个原子性操作多个线程执行时CPU对线程的调度是随机的我们不知道当前程序被执行到哪步就切换到了下一个线程一个最经典的例子就是银行汇款问题一个银行账户存款100这时一个人从该账户取10元同时另一个人向该账户汇10元那么余额应该还是100。那么此时可能发生这种情况A线程负责取款B线程负责汇款A从主内存读到100B从主内存读到100A执行减10操作并将数据刷新到主内存这时主内存数据100-1090而B内存执行加10操作并将数据刷新到主内存最后主内存数据10010110显然这是一个严重的问题我们要保证A线程和B线程有序执行先取款后汇款或者先汇款后取款此为有序性。 6、 同步机制 介绍volatile、synchronized和final 一个线程执行互斥代码过程如下 获得同步锁清空工作内存从主内存拷贝对象副本到工作内存 执行代码(计算或者输出等)刷新主内存数据释放同步锁。所以synchronized既保证了多线程的并发有序性又保证了多线程的内存可见性。 volatile是第二种Java多线程同步的手段根据JLS的说法一个变量可以被volatile修饰在这种情况下内存模型确保所有线程可以看到一致的变量值 class Test { static volatile int i 0, j 0; static void one() { i; j; } static void two() { System.out.println(i i j j); } } 加上volatile可以将共享变量i和j的改变直接响应到主内存中这样保证了i和j的值可以保持一致然而我们不能保证执行two方法的线程是在i和j执行到什么程度获取到的所以volatile可以保证内存可见性不能保证并发有序性。 如果没有volatile则代码执行过程如下   1.将变量i从主内存拷贝到工作内存   2.刷新主内存数据   3.改变i的值   4.将变量j从主内存拷贝到工作内存   5.刷新主内存数据   6.改变j的值 转载于:https://www.cnblogs.com/maydow/p/4873656.html
http://www.yutouwan.com/news/47924/

相关文章:

  • 做网站不打广告怎么赚钱找个人合伙做网站
  • 手机在线制作网站手机搭建平台网站
  • 合肥网站排名wordpress中文主题排行
  • 新乡市做网站的公司做网站用什么域名好
  • 做网站赚钱嘛百度的广告推广需要多少费用
  • 网站建设合同注意汉中网站建设公司电话
  • 做网站为什么需要营业执照天津行业网站建设
  • htmi 个人小网站 模板网络引流怎么做啊?
  • 禅城区企业网站建设大连城市建设集团网站
  • 网站开发语言html天津网站建设求职简历
  • 做网站个体户执照iis wordpress ftp
  • 大型网站需要什么样的团队深圳黄页信息网
  • 做餐饮店铺哪个网站wordpress md5
  • 保利威视 wordpress白帽seo公司
  • 没有网站怎样做搜索引擎推广淡水网站建设定制
  • 网站服务器有哪些种类网站空间支持下载但不能下载文件
  • 单页淘宝客网站php网站下载器
  • 在线制作书封网站wordpress永久免费
  • 大气网站模板怎么免费制作企业网站
  • 网页设计网站简单静态模板哪个做简历的网站可以中英的
  • 广州番禺网站制作推广如何网站专题策划
  • 谁做的四虎网站是多少泉州网上房地产
  • c 做网站优点免费的wordpress企业模板
  • 粮油移动端网页设计素材网站seo诊断分析报告
  • 影楼做网站wordpress需要身份验证
  • 巨腾外贸网站建设公司外贸订单怎么找
  • 肥西县建设局资询网站中国室内设计公司排名榜
  • 开发什么网站免费行情软件app网站mnw直
  • 在兔展上怎么做网站页面应用商店网站源码
  • 死链对网站链轮的影响装饰工程包括哪些主要内容