안녕하세요 모두 0에서 99까지의 숫자의 합계를 계산하는 간단한 프로그램을하고 있습니다. 나는 자바 스레드를 읽고 있었고, 특히 멀티 쓰레딩이 어떻게 작동하는지 이해하려고 노력했습니다. 개념을 이해하는 간단한 프로그램. 하지만 내 프로그램의 출력은 0과 4950을 출력하는 것과 다르다. 실행중인 스레드가 2 개있는 것 같니? 주 스레드 및 다음 개체 스레드가? 출력이 동기화되지 않았기 때문에 문제가 발생합니다. 나는 옳은 길을 가기를 바랍니다. 그러나 확실한 지침이 필요하지 않습니다. 누군가이 문제를 해결하기 위해 동기화 된 방법을 설명해 주시겠습니까? 그것을 이해하는 데 문제가 있습니까?문제는 자바에서 동기화 된 이해
public class Testing {
public static void main(String[] args) {
ThreadB b = new ThreadB();
Thread a = new Thread(b);
a.start();
System.out.println(b.total);
}
}
class ThreadB extends Thread {
int total;
public ThreadB() {
this.total = 0;
}
public synchronized int total() {
for(int i = 0; i < 100; i++) {
total += i;
}
return total;
}
public void run() {
System.out.println(total());
}
}
그래서 개체 b는 주 스레드에서 상속됩니다. 스레드가 실행되고 합계를 수행합니다. 하지만 어떻게 스레드가 또한 결과를 인쇄 할 수 있습니다. 스레드가 그냥 0 및 4950 않습니다 인쇄하는 것 같습니다. 그래서 내 질문에 두 스레드가 동일한 결과를 생성 할 또는 다른 단어를 동일한 변수를 공유 할 수 있습니다. – user3497437
Total을 Testing의 구성원으로 이동하십시오. 그런 다음 정수가 하나만 있으면 공유해야합니다. – mattm