需要你的帮助才能掌握我的基础知识。 请考虑以下片段(来自书:) :)
class Flooring extends Thread
{
final int MAX = 100000000;
int number;
volatile double d = 0;
public Flooring(int n, int priority)
{
number = n;
setPriority(priority);
start(); // start the thread
}
public void run()
{
for(int i = 1; i < MAX; i++)
d = d + (Math.PI + Math.E + Math.floor(i)) / (double)i;
System.out.println(“Inside Thread” + number + “ : ” + d);
}
}
public class FloorThread
{
public static void main(String[] args)
{
for(int i = 1; i < 11; i++)
new Flooring(i, 11-i); // priority decreases
}
}
这里变量d被标记为volatile。这意味着我们希望确保线程之间的可见性,因此它是一个共享变量。 我已经看到一些其他的例子,我们在Thread类中有一个变量,但不期望共享? 不应该每个新的Flooring对象都应该有自己的double d变量??
请帮助,因为我对类似的其他示例感到困惑,这些示例没有标记与volatile相同的变量。
提前致谢。
答案 0 :(得分:3)
我认为没有任何理由让d变得不稳定。每个实例都有自己的副本。你甚至可以在run方法中使用d local。