정말 멍청한 질문입니다.하지만 저는 방법과 스레드가 아마추어 프로그래머로서 어떻게 작동하는지 이해하려고 노력하고 있습니다. 나는 이것이 나의 부분에 대한 이해의 근본적인 부족이라고 확신하지만, 좋은 사람이 나를 똑바로 놓을 수 있기를 바랍니다.다른 스레드에서 같은 메서드를 호출 할 수 있습니까?
여러 스레드를 사용하여 동일한 방법을 여러 번 호출하면 서로 독립적으로 작동하거나 서로 간섭 할 수있는 각 방법의 샌드 박스 버전을 생성합니까? 예를 들어 아래에 몇 가지 간단한 코드를 작성하여 제가 의미하는 바를 설명하려고 시도했습니다.
예에서 버튼을 클릭 할 때 호출되는 메소드가 있습니다. 두 개의 숫자를 취하여 두 번째 숫자를 합산하여 결과를 반환합니다. 이것은 곧장 보인다. 그러나 같은 방법을 사용하여 다른 계산을하고 싶지만 첫 번째 계산이 끝날 때까지 기다리지 않으려한다고 상상해보십시오. 우리는 별도의 스레드에 숫자를 추가하는 메서드를 호출하여 UI 스레드를 유지하지 않을 수 있습니다. 시원한. 좋아,하지만 우리가 이것을 두 번하면 어떨까? 아니면 세 번이나?
제가 물어 보려는 것은 "doSum"이 전달 된 숫자 아래에 처음으로 호출 될 때 10과 20입니다. 코드는 별도의 스레드에서 메서드를 실행하고 대답 30을 반환해야합니다. 두 번째 시간은 그것이 전화 번호는 30과 50이고 결과는 80이어야합니다. 어떤 이유로 인해 첫 번째 스레드의 계산이 계속 진행된다면 두 번째 동일한 메소드를 호출 할 때 덮어 쓰게됩니까? 결과 1이 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