小编Joh*_* T.的帖子

java - volatile关键字也适用于非基元

我不确定volatile关键字是否也应该用于非基元.我有一个由一个线程设置/分配的类成员,并由另一个线程访问.我应该宣布这个成员是不稳定的?

private /* volatile */ Object o;

public void setMember(Object o) {
    this.o = o;
}

public Object getMember() {
    return o;
}
Run Code Online (Sandbox Code Playgroud)

这里,setMember(...)由一个线程调用,getMember()由另一个线程调用.

例如,如果它是布尔值,则答案是肯定的.

我使用的是Java 1.4,本例中的成员是只读的.所以我只关心这种情况下的可见性,因此我对volatile关键字的问题.

java volatile

14
推荐指数
2
解决办法
2407
查看次数

java - 是否为简单的getter初始化一个临时变量?

关于Java性能的一个非常不重​​要的问题,但它让我今天感到疑惑.

说我有简单的吸气剂:

public Object getSomething() {
     return this.member;
}
Run Code Online (Sandbox Code Playgroud)

现在,假设我需要在某些函数/算法中使用getSomething()两次(或更多)的结果.我的问题:调用getSomething()两次(或更多)或者声明一个临时的局部变量并从那时起使用这个变量有什么不同吗?

也就是说

public void algo() {
    Object o = getSomething();

    ... use o ...
}
Run Code Online (Sandbox Code Playgroud)

要么

public void algo() {
    ... call getSomething() multiple times ...
}
Run Code Online (Sandbox Code Playgroud)

我倾向于混合两种选择,没有特别的原因.我知道这没关系,但我只是想知道.

谢谢!

java variables optimization performance

2
推荐指数
1
解决办法
978
查看次数

标签 统计

java ×2

optimization ×1

performance ×1

variables ×1

volatile ×1