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

二手站网站怎做企业计划书

二手站网站怎做,企业计划书,南京企业微信网站建设,wordpress 效率1. 并发编程的两个关键问题 并发是让多个线程同时履行#xff0c;若线程之间是独立的#xff0c;那并发实现起来很简单#xff0c;各自履行各自的就行#xff1b;但常常多条线程之间需要同享数据#xff0c;此时在并发编程进程中就不可避免要斟酌两个问题#xff1a;通讯…1. 并发编程的两个关键问题 并发是让多个线程同时履行若线程之间是独立的那并发实现起来很简单各自履行各自的就行但常常多条线程之间需要同享数据此时在并发编程进程中就不可避免要斟酌两个问题通讯 与 同步。 通讯  通讯是指消息在两条线程之间传递。  既然要传递消息那接收线程 和 发送线程之间必须要有个前后关系此时就需要用到同步。通讯和同步是相辅相成的。 同步  同步是指控制多条线程之间的履行次序。 2. 通讯的方式 2.1 通讯方式的种类 线程之间的通讯1共有两种方式同享内存 和 消息传递。 同享内存  同享内存指的是多条线程同享同1片内存发送者将消息写入内存接收者从内存中读取消息从而实现了消息的传递。  但这类方式有个弊端即需要程序员来控制线程的同步即线程的履行次序。 这类方式并没有真正地实现消息传递只是从结果上来看就像是将消息从1条线程传递到了另外一条线程。 消息传递  顾名思义消息传递指的是发送线程直接将消息传递给接收线程。  由于履行次序由并发机制完成因此不需要程序员添加额外的同步机制但需要声明消息发送和接收的代码。 综上所述对同享内存的通讯方式需要进行显示的同步隐式的通讯  而对消息传递的通讯方式需要隐式的同步显示的通讯。 2.2 Java使用的通讯方式 Java使用同享内存的方式实现多线程之间的消息传递。因此程序员需要写额外的代码用于线程之间的同步。 PS其实同享内存的方式从实现进程来看跟消息传递1点关系都没有1条线程将消息存入同享内存另外一条线程从同享内存中读这条消息。  但从结果来看全部进程就好像是1条消息被从线程A传递到了线程B。  这类方式之所以能实现消息传递依托于两点 必须有1片同享的内存必须要实现多线程的同步 3. Java多线程的内存模型简化版 所有线程都同享1片内存用于存储同享变量  另外每条线程都有各自的存储空间存储各自的局部变量、方法参数、异常对象。 4. volatile是甚么 Java采取同享内存的方式实现消息传递而同享内存需要依托于同步。Java提供了synchronized、volatile关键字实现同步。另外volatile关键字还具有1些额外的功能。 5. volatile的使用 在成员变量前加上该关键字便可。 public volatile boolean flag; 6. volatile的特性 6.1 重排序 重排序是计算机为了提高程序履行效力而对代码的履行顺序进行调剂。你以为代码是1行行顺序履行的但实际并不是如此重排序详解请移步至Java并发编程的艺术(2)——重排序 若两行指令之间没有依赖关系那末计算机可以对他们的顺序进行重排序但如果两行之间的某个变量被volatile修饰后重排序规则会产生变化。 在以下情况下即便两行代码之间没有依赖关系也不会产生重排序 volatile读 若volatile读操作的前1行动volatile读/写则这两行不会产生重排序volatile读操作和它后1行代码都不会产生重排序 volatile写 volatile写操作和它前1行代码都不会产生重排序若volatile写操作的后1行代码为volatile读/写则这两行不会产生重排序。 6.2 可见性 甚么是内存可见性 “内存可见性”指的是1条线程修改完1个同享变量后另外一个线程若访问这个变量将会访问到修改后的值。即1条线程对同享变量的修改对其他线程立便可见。 但如果未对同享变量采取同步机制那末同享变量的修改不会对其他线程立便可见。 为何会出现内存不可见的情况 通过上文可知在Java中每条线程都有各自独立的存储空间另外还有1个所有线程同享的内存空间。  当开启线程时系统会将同享内存中的所有同享变量拷贝1份到线程专属的存储空间中。接下来该线程在结束前的所有操作都是基于自己的存储空间进行的。因此若1条线程改变了1个同享变量仅仅改变的是这条线程专属存储空间中的变量值此时若其他线程访问这个变量访问的依然是先前从同享存储空间读出来的值。  但是我们希望1条线程将某个同享变量修改后其他线程能立即访问到这个最新的值而不是失效值。  这时候就需要同步机制来解决这个问题。 如何确保同享变量的可见性 要确保所有同享变量对所有线程是可见的就需要给所有同享变量使用同步。在Java中你可以选择将同享变量用同步代码块包裹或用volatile修饰同享变量。 为何volatile能保证同享变量的内存可见性 volatile修饰了1个成员变量后这个变量的读写就会比普通变量多1些步骤。 volatile变量写  当被volatile修饰的变量进行写操作时这个变量将会被直接写入同享内存而非线程的专属存储空间。 volatile变量读  当读取1个被volatile修饰的变量时会直接从同享内存中读而非线程专属的存储空间中读。 通过对volatile变量读写的限制就可以保证线程每次读到的都是最新的值从而确保了该变量的内存可见性。 volatile变量赠送的附加功能 进行volatile写操作时不但会将volatile变量写入同享内存系统还会将当前线程专属空间中的所有同享变量写入同享内存。  进行volatile读操作时系统也会1次性将同享内存中所有同享变量读入线程专属空间。  这就意味着如果普通变量在volatile写操作之前被修改那末在volatile读操作以后就可以正确读到他们。  但是在volatile写操作以后被修改的普通变量 和 在volatile读操作之前被访问的普通变量 都不具有内存可见性。 6.3 原子性 甚么是原子性 原子性指的是1组操作必须1起完成中途不能被中断。 volatile能确保long、double读写的原子性 在Java中的所有类型中有long、double类型比较特殊他们占据8字节64比特其余类型都小于64比特。在32位操作系统中CPU1次只能读取/写入32位的数据因此对64位的long、double变量的读写会进行两步。在多线程中若1条线程只写入了long型变量的前32位紧接着另外一条线程读取了这个只有“1半”的变量从而就读到了1个毛病的数据。  为了不这类情况需要在用volatile修饰long、double型变量。 在内存可见性与原子性上volatile就相当因而同步的setter和getter函数。但其实不具有volatile的重排序规则同步块只确保同步块内部的指令不产生重排序其实不确保同步块之外的指令的重排序。 PS1Java中的byte居然是字节bit才是比特位。  PS2char和short⑵字节、int和float⑷字节、long和double⑻字节、byte⑴字节 为了让学习变得轻松、高效今天给大家免费分享一套Java入门教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。需要资料的欢迎加入学习交流群928505736
http://www.yutouwan.com/news/28793/

相关文章:

  • 上海制作企业网站查看网站建设的特点
  • 汝州市建设局网站著名的国外设计网站有哪些
  • 池州网站网站建设cpc引流做网站cpa推广
  • 淘宝怎么发布网站建设wordpress插件手动安装插件
  • 凡总创业网站企业网络推广运营技巧
  • wordpress网站特效网站模块添加
  • 橘色网站模板东莞债优化
  • 网站设计 企业 济南怎么样推广自己的公司
  • html5网站开发wordpress支付宝
  • 如何设计商务网站wordpress 菜单 文章
  • 响应式网站概况网易企业邮箱和163邮箱区别
  • 档案室建设网站android应用市场下载安装
  • 网站建设合同任11网站建设waocc
  • 平台网站建设 厦门wordpress教程安装教程视频教程
  • 做门户网站用什么模板wordpress插件上传
  • 网站建设公司推广方式世界各国黄页
  • 我想建立一个网站徐闻手机网站建设公司
  • 网站备案拍照要求汕头澄海招聘网
  • 网站没有关键词库栖霞网站设计
  • 专业做生鲜的网站好校园网站维护
  • 国示范校建设网站网站建设怎么学
  • 化工企业建网站网站建设视频下载
  • 科技网站官网wordpress小蜜蜂插件
  • 网站开发云南河南广宇建设集团有限公司网站
  • 西安做网站云速网络什么网站做h5
  • 制作微信公众号的网站开发网页在线短网址生成器
  • 网站热区图专业的手机网站建设公司哪家好
  • 网站建设可信赖东莞网络推广教程
  • 衡阳市网站建设公司移动端h5网站开发服务
  • 建设网站能赚钱品牌营销公司