【发布时间】:2014-12-12 20:11:23
【问题描述】:
我知道真的是菜鸟问题,但我试图了解方法和线程如何作为业余程序员工作。我敢肯定这是我根本缺乏理解,但希望一些好人可以让我直截了当。
我想知道的是,如果您使用多个线程多次调用同一个方法,您是否会创建每个方法的沙盒版本,它们彼此独立运行,或者它们会相互干扰。例如,我在下面敲了一些非常简单的代码来试图说明我的意思。
因此,在示例中,我们有一个在单击按钮时调用的方法。它需要两个数字并将它们提供给第二个方法,该方法将它们相加并返回结果。这似乎是直截了当的。但是想象一下,我们想使用相同的方法进行另一次计算,但我们不想等待第一次计算完成。我们可以调用在单独的线程上添加数字的方法,这样它就不会阻塞 UI 线程。凉爽的。好的,但是如果我们这样做两次呢?还是三倍?
我想问的是,第一次调用“doSum”时,传入的数字是 10 和 20。代码在单独的线程上运行该方法,应该返回答案 30。第二次它被称为数字是 30 和 50,结果应该是 80。如果由于某种原因第一个线程中的计算仍在继续,当我第二次调用相同的方法时它会被覆盖吗? result1 是否有被返回为 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。你的代码编译了吗?
-
或将他们移入课堂
标签: java android multithreading android-studio