2016-12-06 3 views
0

Мне нужно объяснить функцию Join, вычисляя параллельно это уравнение D = (a-b) + (c-d). Предположим, что у меня есть уравнение D = (a-b) + (c-d). Как я могу сделать это уравнение параллельно, используя три потока для вычисления (a-b), один для вычисления (c-d) и основного потока, чтобы показать результат. Мне нужно показать, что главное не показывает результат до того, как два потока мертвы.Параллельное суммирование с многопоточной java

+1

Создание трех объектов подкласса и метода run() вызова может работать @BetterEnglish –

ответ

1

Как говорит Джавадок, join() ждет вас ntil заданный поток умирает, следовательно, это оператор, который блокирует до тех пор, пока поток не завершит вычисление. Использование уравнения:

// Choose a, b, c, and d. 
int a = 0; 
int b = 1; 
int c = 2; 
int d = 3; 

// Set up an array for the intermediate results. 
int[] results = new int[2]; 

// Create two threads writing the intermediate results. 
Thread t0 = new Thread(() -> results[0] = a - b); 
Thread t1 = new Thread(() -> results[1] = c - d); 

// Start both threads. 
t0.start(); 
t1.start(); 

// Let the main thread wait until both threads are dead. 
try { 
    t0.join(); 
    t1.join(); 
} catch (InterruptedException e) { /* NOP */ } 

// Sum up the intermediate results and print it. 
System.out.println(results[0] + results[1]); 

Используя простой массив для получения результатов из нити немного тусклый (проверить this question). Однако этого примера достаточно.

1

Я создаю две темы, они парализованы:

Они t1 иt2;

  • Здесь t1 вычисления (аb)
  • t2 вычисляет (кд)

Здесь основной() вычислить общую сумму:

этот код может помочь вам:

class SumThread extends Thread implements Runnable { 
public SumThread(int a, int b) { 
     this.a = a; 
     this.b = b; 
     sum = 0; 
      } 

public void run() { 
    sum=(a-b); 
      } 

public int getSum() { 
    return sum; 
      } 

private int a, b, sum; 

} 


public class Sum2 { 
    public static void main(String args[]) { 
    SumThread t1 = new SumThread(1, 2); 
    SumThread t2 = new SumThread(3, 4); 
    t1.start(); 
    t2.start(); 

try { 
    t1.join(); 
    t2.join(); 
} catch(InterruptedException e) { 
    System.out.println("Interrupted"); 
} 

System.out.printf("The sum %d \n", t1.getSum()+t2.getSum()); 
} 
    } 
Смежные вопросы