网站竞价怎么做网页设计与制作基础代码

张小明 2026/1/9 22:55:15
网站竞价怎么做,网页设计与制作基础代码,wordpress文章管理插件,上海市企业1. 什么是 JMM#xff1f;JMM 的全称是 Java Memory Model#xff0c;即 Java 内存模型。简单来说#xff0c;JMM 是一套规范#xff0c;它定义了在多线程环境下#xff0c;Java 程序中的变量#xff08;特别是共享变量#xff09;如何被写入内存以及如何从内存中读取的…1. 什么是 JMMJMM的全称是Java Memory Model即Java 内存模型。简单来说JMM 是一套规范它定义了在多线程环境下Java 程序中的变量特别是共享变量如何被写入内存以及如何从内存中读取的规则。关键点它不是指 Java 程序运行时内存区域的划分如堆、栈、方法区。那是JVM 内存结构是两个不同的概念。它是一个抽象的概念是一组规则和规范旨在解决由于多线程访问共享数据而可能引发的各种问题如内存可见性、原子性、有序性等。2. 为什么需要 JMMJMM 要解决的问题在没有 JMM 约束的情况下多线程编程会面临三大核心难题这主要是由于现代计算机架构如多级缓存、CPU 指令重排序造成的。1. 可见性问题一个线程修改了共享变量的值另一个线程不能立即看到这个修改。原因为了提高效率每个线程都有自己的工作内存可以理解为CPU高速缓存的一个抽象它们会先将主内存中的共享变量拷贝一份到自己的工作内存中进行操作操作完成后并不一定会立即写回主内存。如果线程A修改了值但未刷新到主内存线程B读取到的就还是旧的值。例子// 共享变量 private static boolean flag false; public static void main(String[] args) { new Thread(() - { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } flag true; // 线程A修改flag为true System.out.println(Flag set to true.); }).start(); new Thread(() - { while (!flag) { // 线程B可能永远无法跳出循环因为它看不到线程A对flag的修改 } System.out.println(Thread sees flag change.); }).start(); }在没有同步措施的情况下第二个线程可能会陷入死循环。2. 原子性问题一个或多个操作要么全部执行成功要么全部不执行中间不能被任何其他操作中断。原因即使是看似简单的操作如i在底层也是由多个指令组成的读取i计算i1写回i。如果多个线程同时执行i就可能发生线程A刚读取完i的值CPU时间片就被线程B抢走线程B也读取了相同的值并完成写入然后线程A再继续写回最终导致两次i结果只增加了1。例子count就不是原子操作。3. 有序性问题程序执行的顺序不一定就是代码编写的顺序。原因为了性能优化编译器和处理器常常会对指令进行重排序。只要在单线程环境下重排序后的结果与顺序执行的结果一致遵守as-if-serial语义这种优化就是被允许的。但在多线程环境下重排序可能会导致意想不到的结果。例子经典的双重检查锁定单例模式问题public class Singleton { private static Singleton instance; // 没有volatile public static Singleton getInstance() { if (instance null) { // 第一次检查 synchronized (Singleton.class) { if (instance null) { // 第二次检查 instance new Singleton(); // 非原子操作可能发生重排序 } } } return instance; } }instance new Singleton()这行代码在 JVM 中大致做了三件事分配对象的内存空间初始化对象将instance引用指向这块内存如果步骤2和3被重排序线程A可能刚执行完步骤3instance已不为null但还未初始化对象时线程B在第一次检查if (instance null)时发现不为null就会直接返回一个尚未初始化完成的错误对象。3. JMM 是如何解决这些问题的JMM 通过定义一些关键的关键字和规则来解决上述问题主要是围绕主内存和工作内存之间的交互协议。核心手段synchronized关键字原子性synchronized块中的操作具有原子性同一时刻只有一个线程能执行。可见性当线程进入synchronized块时会清空工作内存从主内存重新加载变量。退出synchronized块时会把工作内存中的修改刷新到主内存。有序性它通过“一个变量在同一时刻只允许一条线程对其进行 lock 操作”来限制重排序从而保证有序性。可以看作是单线程执行。volatile关键字可见性当写一个volatile变量时JMM 会立即将该线程工作内存中的新值强制刷新到主内存。当读一个volatile变量时JMM 会使该线程的工作内存无效从而从主内存中重新读取。有序性它通过插入内存屏障来禁止指令重排序。确保了volatile写操作之前的任何读写操作都不会被重排序到写操作之后volatile读操作之后的任何读写操作都不会被重排序到读操作之前。注意volatile不保证原子性例如volatile int i; i仍然不是原子的。Happens-Before 原则这是 JMM 中最核心、最复杂的概念之一。它是一组规则用于描述两个操作之间的内存可见性。如果操作 AHappens-Before于操作 B那么 A 操作所做的任何修改对 B 操作都是可见的。程序次序规则在一个线程内书写在前面的操作先行发生于书写在后面的操作。管程锁定规则一个 unlock 操作先行发生于后面对同一个锁的 lock 操作。volatile变量规则对一个 volatile 变量的写操作先行发生于后面对这个变量的读操作。线程启动规则Thread 对象的start()方法先行发生于此线程的每一个动作。线程终止规则线程中的所有操作都先行发生于对此线程的终止检测。线程中断规则对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生。对象终结规则一个对象的初始化完成先行发生于它的finalize()方法的开始。传递性如果操作 A 先行发生于操作 B操作 B 先行发生于操作 C那么操作 A 先行发生于操作 C。总结特性问题描述JMM 解决方案原子性操作被中途打断synchronized可见性一个线程的修改对其他线程不可见synchronized,volatile, Happens-Before有序性指令执行顺序与代码顺序不一致synchronized,volatile, Happens-Before一句话总结JMMJava内存模型是一套规范它屏蔽了底层硬件内存访问的差异为 Java 开发者提供了一套统一的内存访问模型使得我们在编写多线程程序时即使在不了解底层硬件细节的情况下也能通过使用synchronized、volatile等关键字编写出正确、线程安全的代码。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

建设通网站公路查询网站建设公司怎么挣钱

数据库查询全攻略:从基础到高级应用 1. 使用 进行数据库查询 在数据库操作中, <sql:query> 是一个非常实用的标签,它可以帮助我们轻松执行数据库查询。其基本语法如下: <sql:query sql var [scope] [dataSource] [startRow] [maxRows]/> 其中, sql 属…

张小明 2026/1/9 22:14:36 网站建设

seo建站外贸杭州seo网络公司

计算机毕设java鲜花在线商城911yt9 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着互联网的飞速发展和人们生活水平的不断提高&#xff0c;鲜花的需求逐渐从线下走向线上。尤…

张小明 2026/1/4 20:38:28 网站建设

怎么做类似淘宝的网站四川网站建设报价

第一章&#xff1a;MCP证书续证的时间限制概述 Microsoft Certified Professional&#xff08;MCP&#xff09;证书作为IT从业者专业能力的重要认证&#xff0c;其有效性与续证时间密切相关。自2021年起&#xff0c;微软对多数认证实施了有效期机制&#xff0c;大多数MCP相关认…

张小明 2026/1/1 10:11:05 网站建设

北京网站建设最好公司网站怎么做app吗

SVGAPlayer-Web-Lite轻量级动画播放器终极指南&#xff1a;移动端性能优化技巧 【免费下载链接】SVGAPlayer-Web-Lite 项目地址: https://gitcode.com/gh_mirrors/sv/SVGAPlayer-Web-Lite 还在为移动端Web动画卡顿、资源占用过高而烦恼吗&#xff1f;SVGAPlayer-Web-Li…

张小明 2026/1/7 15:41:30 网站建设

官方黄金网站软件app大全下载网站建设用啥技术

Ruffle字体加载终极指南&#xff1a;从乱码到完美显示的完整解决方案 【免费下载链接】ruffle A Flash Player emulator written in Rust 项目地址: https://gitcode.com/GitHub_Trending/ru/ruffle 您是否曾在使用Ruffle播放SWF文件时&#xff0c;发现文字变成了乱码方…

张小明 2025/12/27 5:29:56 网站建设

长春网站制作wangwordpress 设置cookies

面对海量文本数据无从下手&#xff1f;KH Coder正是为这类痛点量身打造的开源文本分析解决方案。这款工具让没有编程背景的用户也能轻松完成复杂的文本挖掘任务&#xff0c;无论是学术研究还是商业分析&#xff0c;都能获得专业级的数据洞察。 【免费下载链接】khcoder KH Code…

张小明 2025/12/27 5:29:56 网站建设