2014-10-01 4 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 иметь свою собственную двойную переменную d?

Пожалуйста, помогите, поскольку я запутался в аналогичных других примерах, не отмечая такие же переменные, как изменчивые.

Заранее спасибо.

+0

«где у нас есть переменная в классе Thread, но не ожидается?» : не получить эту часть, не могли бы вы исправить/уточнить, пожалуйста? –

+0

Хмм, начало потока от конструктора кажется мне довольно хитростью. –

+0

Привет valentin, Это опечатка ... для этого. это доля (не уверен). – Ouney

ответ

3

Я не вижу причин, чтобы d был неустойчивым. У каждого экземпляра есть своя собственная копия. Вы даже можете сделать d локальным методом run.

Смежные вопросы