Действительно вопрос с нобом Я знаю, но я пытаюсь понять, как методы и потоки работают как любительский программист. Я уверен, что это фундаментальное отсутствие понимания с моей стороны, но, надеюсь, какой-то хороший человек может поставить меня прямо.Можете ли вы назвать тот же метод для разных потоков?
Что мне было интересно, если вы вызываете один и тот же метод несколько раз, используя несколько потоков, вы создаете изолированные варианты каждого метода, которые действуют независимо друг от друга или могут мешать друг другу. Например, я попытался проиллюстрировать, что я имею в виду.
Итак, в примере у нас есть метод, который вызывается при нажатии кнопки. Он принимает два числа и передает их во второй метод, который объединяет их и возвращает результат. Это кажется прямым. Но представьте, что мы хотели сделать еще один расчет, используя тот же метод, но мы не хотели дождаться завершения первого вычисления. Мы могли бы вызвать метод, который добавляет числа в отдельный поток, чтобы он не поддерживал поток пользовательского интерфейса. Круто. Хорошо, но что, если мы сделаем это дважды? или три раза?
То, что я пытаюсь спросить, - это когда «doSum» вызывается в первый раз под номерами, переданными в него, равными 10 и 20. Код запускает метод в отдельном потоке и должен возвращать ответ 30. Второй время, которое называется числом, составляет 30 и 50, а результат должен быть равен 80. Если по какой-то причине расчет в первом потоке продолжался, он перезаписывается, когда я вызываю тот же метод во второй раз? Повлияет ли когда-либо на риск быть возвращенным как 80 или 140?
Это имеет смысл для всех?
public void onbuttonclicked(View v) {
int number1;
int number2;
int result1, result2, result3;
//first callculation --------------------------------------
number1 = 10;
number2 = 20;
Thread t1 = new Thread(new Runnable() {
public void run() {
result1 = doSum(number1, number2);
}
});
t1.start();
//second callculation -----------------------------------
number1 = 30;
number2 = 50;
Thread t2 = new Thread(new Runnable() {
public void run() {
result2 = doSum(number1, number2);
}
});
t2.start();
//third callculation -----------------------------------------
number1 = 60;
number2 = 80;
Thread t3 = new Thread(new Runnable() {
public void run() {
result3 = doSum(number1, number2);
}
});
t3.start();
}
public static int doSum(int a, int b)
{
int result = a + b;
return result;
}
Переменные number1, number2 и number3 должны быть * final *. Содержит ли ваш код? – TheLostMind
или переместить их в класс – minghua