Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!
当前位置: 主页 > Java文档 > Java基础相关 >

Java并发编程手册 PDF 下载


分享到:
时间:2023-10-27 09:04来源:http://www.java1234.com 作者:转载  侵权举报
Java并发编程手册
失效链接处理
Java并发编程手册 PDF 下载


 
 
相关截图:
 


主要内容:

final和static
 
很多时候会容易把static和final关键字混淆,static作用于成员变量用来表示只保存一份副本,而final的作用是用
来保证变量不可变。看下面这个例子:
class MyClass {
public final double Math.random();
public static double Math.random();
}
public class Test2 {
public static void main(String[] args)
MyClass myClass1 new MyClass();
MyClass myClass2 new MyClass();
System.out.println(myClass1.i);
System.out.println(myClass1.j);
System.out.println(myClass2.i);
System.out.println(myClass2.j);
}
}
// 出:
// 0.6885279073145978
// 0.7678464493258529
// 0.5645174724833194
// 0.7678464493258529
运行这段代码就会发现,每次打印的两个j值都是一样的,而i的值却是不同的。从这里就可以知道final和static变
量的区别了。

final和volatitle
 
这两个变量看起来没有什么关系,但是我学习JAVA内存模型时,感觉两者还是有很多异同,下面我简单总结一下。
禁止重排序规则:
对于volatitle,volatitle变量前面的赋值和取值,只能排在volatitle变量的前面,volatitle变量后面
赋值和取值,只能排在volatitle变量的后面,这个雷打不动!至于volatitle变量前面的赋值和取值,
比如 a=1,b=2,他们的排序就不能保证了,可能是b=2,a=1,所以只能保证a和b是排在volatitle变
量前 面,volatitle变量后面的排序规则同上。(volatitle的排序规则,是针对volatitle的前后变量而言
的)
对于final,它的禁止重排序规则和它前后的变量没有任何关系,可以排在final前,也可以排在final后。
final的禁止重排序规则是针对构造函数而言的,也就是只有先给final赋值或者取值后,才能完成构造
函数的初始化,但是普通变量,可能是先初始化构造函数,然后在给变量赋值。同理,当获取某个对象
时,也是只能先成功获取该对象的引用,再去获取final成员变量的值,但是普通变量不能保证,可能会
导致普通变量的读取,排在了获取对象引用的前面。(final的排序规则,是针对final的成员变量和对
象的构造函数而言)
内存可见性:
两者都有相同的内存可见性,对于final,这个值都不变,所有的线程看到的值都是一样的,当然所有线
程可见。对于volatitle,它的值的改变,是强刷内存的,同时也会让其它线程的本地缓存的值也相应改
变。
使用场景:
final主要是保证某个值不变,或者不类不被继承。volatitle主要是保证多个线程对该变量的内存可
见性,常用于多个线程开始、结束的标记符等。所以说,两者的使用场景,简直是风马牛不相及。




 
 
------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐