2014-10-01 114 views
0

需要您的幫助才能讓我的基礎知識正確。 請考慮下面的片段(從一本書:))多個線程之間的數據共享(班級)

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被標記爲揮發性。這意味着我們希望確保線程間的可見性,因此它是一個共享變量。 我已經看到了一些其他的例子,我們在Thread類中有一個變量,但不希望共享? 不應該每個新的Flooring對象都應該有它自己的double d變量嗎?

請大家幫忙,因爲我對類似的其他例子沒有把變量標記爲volatile類型。

在此先感謝。

+0

「我們在Thread類中有一個變量,但不能確定嗎?」 :沒有得到這部分,你能糾正/澄清嗎? – 2014-10-01 04:25:52

+0

嗯,從構造函數開始線程對我來說似乎相當狡猾。 – 2014-10-01 04:29:23

+0

嗨瓦倫丁,這是一個錯字。這是共享(不知道)。 – Ouney 2014-10-01 04:34:32

回答

3

我沒有看到d是易變的任何理由。每個實例都有自己的副本。你甚至可以使運行方法本地化。