Java中static和volatile关键字的区别

云网络9个月前 (08-28)建站教程74

区别有:1. 作用范围不同;2. 变量类型不同;3. 内存模型不同;4. 线程安全不同;5. 性能不同。作用不同指的是,static关键字用于声明类级别的变量或方法,所有类的实例共享同一个static变量的副本。volatile关键字用于确保一个变量在多线程环境中的可见性,使所有线程都能看到最新的变量值。

1. 作用范围不同

  • static关键字:用于创建类级别的变量或方法,所有类的实例共享同一个static变量的副本。

  • volatile关键字:用于确保一个变量在多线程环境中的可见性,使所有线程都能看到最新的变量值。

2. 变量类型不同

  • static:可用于变量、方法、初始化块和内部类。

  • volatile:仅用于声明变量。

3. 内存模型不同

  • static:static变量在内存中有一个存储位置,所有实例共享这一个存储位置。

  • volatile:强制线程每次读取volatile变量时都从主内存中获取,每次写入时都写入主内存。

4. 线程安全不同

  • static:仅通过将变量声明为static并不能确保线程安全。

  • volatile:通过保证变量的可见性,提供了一定的线程安全保障。

5. 性能不同

  • static:性能高,因为所有实例共享一个变量副本。

  • volatile:可能影响性能,因为每次读写都需要访问主内存。


延伸阅读

static关键字的五个重要作用是什么

1.修饰局部变量

static修饰局部变量时,使得被修饰的变量成为静态变量,存储在静态区。存储在静态区的数据生命周期与程序相同,在main函数之前初始化,在程序退出时销毁。

2.修饰全局变量

全局变量本来就存储在静态区,因此static并不能改变其存储位置。但是,static限制了其链接属性。被static修饰的全局变量只能被该包含该定义的文件访问(即改变了作用域)。

3.修饰函数

static修饰函数使得函数只能在包含该函数定义的文件中被调用。对于静态函数,声明和定义需要放在同一个文件夹中。

4.面向对象中修饰数据成员

被static修饰的数据成员实际上相当于类域中的全局变量。因此,对于类的每个对象来说,它是共有的。它在整个程序中只有一份拷贝,只在定义时分配一次内存,供该类所有的对象使用,其值可以通过每个对象来更新。由于静态数据成员存储在全局数据区,因此,在定义时就要分配内存,这也就导致静态数据成员不能在类声明中定义。

5.面向对象中修饰成员函数

同静态数据成员一样,静态成员函数也是属于类,而不属于任何一个类的实体对象,因此,静态成员函数不含有this指针。同时,它也不能访问类中其它的非静态数据成员和函数。


相关文章

网站出现Service Unavailable提示怎么办?

问:为什么我的网站有时会出现“Service Unavailable”的提示,有时候刷新几下又可以访问。答: 出现这种情况是由于您的网站超过了系统资源限制造成的,主要是流量太大或者程序占用资源太多。1...

图数据库和关系数据库有哪些区别

图数据库和关系数据库的区别主要体现在以下4点:1.存储模型不同;2.查询模型不同;3.分析模型不同;4.实时查询性能不同。图数据库是基于图模型的数据库,相比关系型数据库,能够有效解决实时的个性化推荐等...

微软宣布为商业客户提供新的 Copilot 版权承诺:将承担潜在法律风险

微软宣布为商业客户提供新的 Copilot 版权承诺:将承担潜在法律风险

9月8日消息:微软公司周四表示,如果使用其人工智能产品的客户因生成内容而被起诉侵犯版权,该公司将承担法律责任。微软将承担由第三方提出的任何索赔所带来的潜在法律风险,只要该公司的客户使用其产品中内置的「...

周杰伦演唱会上受伤?经纪公司辟谣:子虚乌有、他身体没问题

周杰伦演唱会上受伤?经纪公司辟谣:子虚乌有、他身体没问题

9月9日消息,昨日晚间,周杰伦在天津举办了一场盛大的演唱会,而有消息称,由于设备故障,导致周杰伦受伤,一时间周杰伦演唱会上受伤”冲上热搜第一,不少粉丝质问主办方为何不做好安保措施。随后,周杰伦经纪公司...

网站权重一直未提升的原因何在?

我们都知道,一个网站的成败取决区在搜索引擎中的排名,而一个网站如果没有权重就根本不可能会有排名,所以对于我们站长而言,不能够只是单单的从表 面工作而去优化我们的网站。而是需要多多去注重优化中的细节性工...

扎克伯格放大招:新AI大模型性能升级几倍 要做世界最强 | AI前哨

凤凰网科技讯《AI前哨》北京时间9月11日消息,脸书创始人马克扎克伯格(Mark Zuckerberg)已经把目标对准了OpenAI。知情人士称,脸书母公司Meta正在开发一种新的人工智能(AI)系统...