多个线程之间的数据共享(类级别)

时间:2014-10-01 04:22:04

标签: java multithreading

需要你的帮助才能掌握我的基础知识。 请考虑以下片段(来自书:) :)

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相同的变量。

提前致谢。

1 个答案:

答案 0 :(得分:3)

我认为没有任何理由让d变得不稳定。每个实例都有自己的副本。你甚至可以在run方法中使用d local。