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

万户网络网站顾问站内seo的技巧

万户网络网站顾问,站内seo的技巧,做网站上传的程序在哪里下载,网站建设可用性的五个方面在Java并发编程中,as - if - serial 与 happens - before 原则是确保程序在多线程环境下正确执行的重要规则,下面为你详细讲解: as - if - serial原则 定义:as - if - serial 原则是指,不管编译器和处理器如何优化&a…

在Java并发编程中,as - if - serialhappens - before 原则是确保程序在多线程环境下正确执行的重要规则,下面为你详细讲解:

as - if - serial原则

  1. 定义as - if - serial 原则是指,不管编译器和处理器如何优化,单线程程序的执行结果都不能被改变。编译器、处理器会遵守这个原则对单线程程序的执行顺序进行优化,保证最终执行结果和代码按照顺序执行的结果一致。
  2. 目的:它的主要目的是在不改变程序执行结果的前提下,尽可能地提高单线程程序的执行效率。因为在单线程环境下,程序员无需担心多线程带来的并发问题,编译器和处理器可以通过重排序等优化手段,让程序运行得更快。
  3. 示例
int a = 1;
int b = 2;
int c = a + b;

在这个简单的单线程代码片段中,编译器和处理器可能会对指令进行重排序。例如,它们可能先执行 int b = 2;,再执行 int a = 1;,最后执行 int c = a + b;。但无论如何重排序,最终 c 的值都会是 3,不会影响程序的执行结果,这就是 as - if - serial 原则的体现。

happens - before原则

  1. 定义happens - before 原则是Java内存模型(JMM)中定义的一种偏序关系,用于描述两个操作之间的内存可见性。如果操作A happens - before 操作B,那么操作A的执行结果对操作B是可见的,并且操作A的执行顺序在操作B之前。这里的“可见”不仅包括数据的可见性,还包括对内存操作顺序的保证。
  2. 具体规则
    • 程序顺序规则:在一个线程内,按照代码顺序,书写在前面的操作 happens - before 书写在后面的操作。例如:
int a = 1; // 操作A
int b = a + 1; // 操作B

这里操作A happens - before 操作B,因为在同一个线程内,代码顺序决定了执行顺序和可见性。
- 监视器锁规则:对一个锁的解锁操作 happens - before 后续对这个锁的加锁操作。例如:

synchronized (this) {// 临界区1,锁的加锁操作int a = 1;
} // 锁的解锁操作synchronized (this) {// 锁的加锁操作int b = a + 1; // 这里能看到临界区1中a的赋值结果
}

第一个 synchronized 块的解锁操作 happens - before 第二个 synchronized 块的加锁操作,所以第二个 synchronized 块能看到第一个 synchronized 块中对 a 的赋值。
- volatile变量规则:对一个 volatile 变量的写操作 happens - before 后续对这个 volatile 变量的读操作。例如:

volatile int a;Thread thread1 = new Thread(() -> {a = 1; // 对volatile变量a的写操作
});Thread thread2 = new Thread(() -> {int b = a; // 对volatile变量a的读操作,能看到thread1中对a的赋值
});

由于 avolatile 变量,所以 thread1 中对 a 的写操作 happens - before thread2 中对 a 的读操作。
- 线程启动规则Thread 对象的 start() 方法 happens - before 此线程的每一个动作。例如:

Thread thread = new Thread(() -> {int a = 1;
});
thread.start(); // start()方法happens - before线程内部的操作

start() 方法的调用 happens - before 线程内部对 a 的赋值操作,保证线程启动后能正确执行内部代码。
- 线程终止规则:线程中的所有操作都 happens - before 对此线程的终止检测。例如:

Thread thread = new Thread(() -> {int a = 1;
});
thread.start();
thread.join(); // 等待线程终止,线程内部所有操作happens - before这里

thread.join() 能保证在其之前线程内部的所有操作都已完成。
- 线程中断规则:对线程 interrupt() 方法的调用 happens - before 被中断线程的代码检测到中断事件的发生。例如:

Thread thread = new Thread(() -> {while (!Thread.currentThread().isInterrupted()) {// 循环}
});
thread.start();
thread.interrupt(); // interrupt()方法调用happens - before线程内部对中断的检测

interrupt() 方法的调用 happens - before 线程内部对中断状态的检测。
- 对象终结规则:一个对象的初始化完成(构造函数执行结束) happens - before 它的 finalize() 方法的开始。
3. 作用happens - before 原则为多线程编程提供了一种内存可见性的保障机制。通过这些规则,程序员可以判断在多线程环境下,一个操作的结果是否对另一个操作可见,从而避免数据竞争和其他并发问题。同时,它也为编译器和处理器的优化提供了一定的限制,即优化不能违反 happens - before 原则,以确保多线程程序的正确性。

as - if - serial 原则主要针对单线程程序的优化,而 happens - before 原则则重点解决多线程环境下的内存可见性和操作顺序问题,两者共同保证了Java程序在不同执行环境下的正确性和高效性。

http://www.dtcms.com/wzjs/814987.html

相关文章:

  • 对自己做的网站总结小程序制作方案
  • 微信营销网站模板哪个网站做自行车评测的
  • 做网站网站代理犯法吗外贸公司的网站
  • 做相册的网站 网易汽车之家网页版官网找车
  • 网站加载等待wordpress打包主题
  • 网站域名到期后果企业网站建设需求分析
  • wordpress站点取名asp网站镜像代码
  • 网站备案公共查询vivo官方网站进入
  • 做网站致富沈阳城市建设管理学校网站
  • 网站创建怎么做网站有哪些平台
  • 有域名了网站怎么建设简述jsp网站开发的环境配置
  • 网站租金可以做办公费吗wordpress 上传组件
  • 整站seo技术搜索引擎优化网页设计大师
  • 大英县住房和城乡建设局网站岳阳做公司网站
  • 哪些网站可以做海报热点的一级a做爰精免费网站
  • 域名如何解析别人网站网站上怎样做下载文档链接
  • 莞城营销型网站建设win7本地做网站
  • 网站做简介免费下载微信
  • 时尚女装网站设计杭州seo托管公司推荐
  • 视频手机网站开发虚拟云手机免费永久
  • asp网站js悬浮窗怎么做百度一下你就知道首页官网
  • 携程网站建设项目wordpress 内网慢
  • 零成本游戏网站开发北京网站备案号查询
  • 企业做网站需要准备什么资料广西公司做网站
  • seo如何分析一个网站网站有死链接怎么办
  • 企业网站推广服务协议wordpress自定义类型模板
  • 建设工程竣工竣工档案网站如果你想了解信息
  • 网站建设 上海网站建设大连关键词优化服务
  • html 社区网站 模板ip138域名查询
  • 文昌市建设局网站品牌商城网站建设公司