Reg*_*ous 2 java multithreading android android-studio
真的没有问题我知道,但我试图理解方法和线程如何作为一个业余程序员.我确信这对我来说是一个根本缺乏理解,但希望一些好人可以让我直截了当.
我想知道的是,如果您使用多个线程多次调用相同的方法,您是否创建了每个方法的沙盒版本,这些版本彼此独立地操作,或者它们可以相互干扰.例如,我在下面敲了一些非常简单的代码来试图说明我的意思.
因此,在示例中,我们有一个单击按钮时调用的方法.它需要两个数字并将它们输入到第二个方法中,将它们加在一起并返回结果.这似乎是直截了当的.但想象一下,我们想用相同的方法进行另一次计算,但我们不想等待第一次计算完成.我们可以调用在单独的线程上添加数字的方法,这样它就不会阻止UI线程.凉.好的,但如果我们这样做两次怎么办?还是三次?
我想问的是,当第一次调用"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;
}
Run Code Online (Sandbox Code Playgroud)
你应该知道的主要有两件事.
如果2个线程调用相同的方法,则每个线程将具有该方法的不同堆栈帧.因此,方法局部变量是线程安全的.在一个方法的局部变量中所做的更改不会干扰其他线程的更改.
当两个线程都修改共享资源时,您应该(通常)担心线程安全/干扰.
PS:你doSum()做的很少.智能JVM实际上可能内联该方法.
| 归档时间: |
|
| 查看次数: |
3811 次 |
| 最近记录: |