我需要使用一个final修饰的对象的属性,用之前进行非空判断,如果为空值则改成一个默认值。这样的话取出来的属性肯定不能用final修饰了,但是这样会不会造成线程安全问题?final在多线程中是不是可以防止这个线程改变了另一个线程的值?
3条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
oyljerry 2017-03-14 07:03最佳回答 专家已采纳线程安全需要加锁保护。final只是语法层面
采纳该答案 已采纳该答案 专家已采纳评论解决 无用打赏举报微信扫一扫
分享评论登录 后可回复...
查看更多回答(2条)
报告相同问题?
提交
相关推荐 更多相似问题
- 2017-03-14 06:56回答 3 已采纳 线程安全需要加锁保护。final只是语法层面
- 2021-06-28 20:29回答 4 已采纳 因为b是字符串常量,比较字符串的值;d是变量比较的地址,地址不相同所以返回假。
- 2021-06-28 22:08回答 1 已采纳 这里的a是字符串直接量,在java的语法中是对象,java虚拟机为了提高内存存储效率,同样序列的字符串直接量为一个实例,拼接上final修饰的常量不能再引用别的变量,c就相当于重新创造,但是回到第一句
- 2019-01-08 16:30Dzq_Boyka的博客 我的代码中已经多次使用了线程,然后还非常喜欢使用据说是线程不安全的静态方法,然后又看到很多地方最容易提的问题就是这个东西线程不安全 于是我不免产生了以下几个亟待解决的问题: 什么样的代码是天生线程...
- 2021-02-12 22:33BenzzZX的博客 我有一堂课,看起来像这样:public class Foo() {private static final HashMap sharedData;private final HashMap myRefOfInnerHashMap;static {// time-consuming initialization of sharedDatafinal Has...
- 2020-01-26 21:45疾风先生的博客 编译器可以跨同步屏障移动对final修饰的字段值进行读取和调用任意或未知的方法 编译器对于final修饰的字段允许保留缓存其在寄存器中,而在必须重新加载非final字段的情况下,将通过使用缓存的方式保留着而不从主内存中...
- 2017-07-20 09:02回答 8 已采纳 这两个a对象是不同的对象,因此a.c不是同一个变量,你给不同的变量赋值,谈不上可以不可以修改
- 2015-12-11 13:55回答 5 已采纳 普及下static的基础知识,依次回答如下: 1. static{ } 代码块的位置:可以放在类定义中的任何位置,但是它的执行是在类实例化之前。即你new Object()时,静态代码块是在构造函数
- 2021-10-10 21:07回答 4 已采纳 首先,你看一下你的子类代码,那叫重新赋值吗?应该是在子类中开辟一个空间用来存放新的变量名X,你并没有使用父类里的X,如果你要使用直接像这样就行了 另外要纠正一点,就是如果在一个类里面定义变量在方法外
- 2019-10-26 15:56骚小孩呀的博客 对于final域,编译器和处理器遵循两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给另一个引用变量,这两个操作之间不能重排序。 初次读一个包含final域的对象的引用,与...
- 2021-11-26 17:07
- 2019-01-08 16:15Dzq_Boyka的博客 翻译自http://www.javamex.com/tutorials/synchronization_final.shtml 在Java5中,final关键字是非常重要而事实上却经常被忽视其作为同步的作用...本质上讲,final能够做出如下保证:当你创建一个对象时,使用fin...
- 2017-07-12 08:18回答 2 已采纳 Log4j组件设计用于大量多线程系统 log4j是线程安全的。原因是AppenderSkeleton.doAppend()方法是同步的。但要小心配置编程! 例如,您不能在不同的appender中使用
- 2016-05-28 04:21回答 2 已采纳 final的原因:内部类对象的生命周期会超过局部变量的生命期。局部变量的生命期:当该方法被调用时,该方法中的局部变量在栈中被创建,当方法调用结束时,这些局部变量消失。但是内部类对象的生命期与其它类
- 2011-08-14 09:58回答 3 已采纳 还可以在块代码处, 比如 class A { final int a; { a =5; } } 其他都不可以了
- 2019-05-17 11:25雨夜浅痕的博客 https://www.cnblogs.com/mianlaoshu/articles/3648403.html
- 2021-11-15 15:15来老铁干了这碗代码的博客 与线程安全的关系:final在一定程度上能使某些变量强制变得线程安全 static 意思是,这个对象是一个全局变量了,你可以在多个地方,多个线程中调用到它,而且调用的是同一个它 与线程安全的关系:一般这种的变量很...
- white camel的博客 线程出现问题的根本原因是因为线程上下文切换,导致线程里的指令没有执行完就切换执行其它线程了,下面举一个例子 public class Test { static int count = 0; public static void main(String[] args) throws ...
- 2017-02-17 02:08回答 5 已采纳 Java关键字final有“这是无法改变的”或者“终态的”含义.如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。 使用final方法的原因有二: 第一、把方法锁定,防止任
- 2018-05-07 16:02weixin_42061676的博客 二、值能不能改变的问题1、对于基本数据类型的,如byte short char int 等,赋值后被final修饰的变量不能改变。2、对于引用数据类型,地址不能改变,但是地址中的值可以发生改变。(String和包装类除外)...
- 没有解决我的问题, 去提问