0
나는 1000 개의 스레드를 생성하고 각 스레드는 변수 합에 1을 더하는 프로그램을 만들었습니다. 제 문제는 출력이 1 초 밖에되지 않습니다. 나는 단지 1 초를 얻을 setSumValue 방법을 동기화해도변수 값을 변경하기 위해 1000 개의 스레드 만들기
class Threading implements Runnable{
T6_Q1 sumObject=new T6_Q1();
Thread t;
Threading(){
t=new Thread(this);
t.start();
}
@Override
public void run() {
setSumValue();
System.out.println(sumObject.getSum());
}
public void setSumValue(){
Integer value=sumObject.getSum().intValue()+1;
sumObject.setSum(value);
}
}
public class T6_Q1
{
Integer sum =new Integer(0);
public void setSum(int value){
this.sum=new Integer(value);
}
//method to get the sum value
public Integer getSum(){
return this.sum;
}
public static void main(String[] args) {
//launches 1000 threads
for(int i=1;i<=1000;i++)
{
new Threading();
}
}
}
: 여기
는 프로그램입니다. 여기서 내가 뭘 잘못하고 있니? (스레딩에 익숙하지 않으므로 오류를 이해하기가 어렵습니다.)감사합니다.
"패배 목적"부분을 제외한 모든 것에 동의합니다. 이것은 분명히 단지 최소한의 예일 뿐이다.보다 넓은 맥락에서 쓰레드 - 세이프 (thread-safe) 버전이 바람직 할 것이다. –
@MarkoTopolnik : 아니요. 'AtomicInteger'. – SLaks
좋아요, 그건 Java 전문가의 팁입니다.이 예제를 그대로 사용하는 경우에만 작동합니다. 어쩌면 하나의 변수를 돌연변이시키는 것 이상의 작업이있을 수 있습니다. 또한 잠금 장치가 높은 부하 상태에서 CAS보다 실제로 더 효율적이라고 생각하십시오. –