2016-03-16 2 views
0

Все знают факториал справа. Я занимаюсь отношениями Thread и Class. Мой вопрос получает результаты из класса потоков. Если вы предлагаете обратные вызовы, можете ли вы реализовать класс обратного вызова для этого примера.Удаление нити из arraylist, stack, queue after finish task

public class factorial extends Thread { 
    int sz = 0; 
    List <String> ar = new ArrayList <String>(); 
    public factorial(int n) { 
     this.sz = n; 
    } 
    public void run() { 
     int p = 1; 
     for (int i = 1; i <= sz; i++) { 
      p *= i; 
      ar.add(p + ""); 
     } 
    } 
} 
public class Test { 
    public static List <String> ans = new ArrayList <String>(); 
    public static void main(String[] args) { 
     factorial f1 = new factorial(10); 
     factorial f2 = new factorial(8); 
    } 
} 
+0

'f1.start()' должен запустить поток, сохраняющий инкрементные факториальные значения в списке 'ar'. Не уверен, что я получаю ваш вопрос. – rahulbmv

+0

где упоминаются стек, очередь и обратный вызов в этом коде? –

ответ

1

в главном:

// Start both threads 
f1.start(); 
f2.start(); 

// Wait until they are finished 
f1.join(); 
f2.join(); 

// Here are your lists 
List<String> f1Strings = f1.ar; 
List<String> f2Strings = f2.ar; 

Однако, я не могу сдержаться от codereviewing немного:

  • Имена классов начинаются с заглавной буквы (Factorial), и должен более подробно, например: FactorialCalculatorThread
  • Не обращайтесь непосредственно к полям (как в примере выше), используйте getters ()) и используйте описательные имена!
  • Также отдельные проблемы! Я бы не вычислял факториалы, а также преобразовывал в строку одним методом.