나는 누산기를 사용하고 있으며 이러한 객체가 스레드로부터 안전한지 알고 싶습니까?축전지는 thread로부터 안전한가요?
accumInt
은 AccumulatorParam<Integer>
입니다.
// Current value accumInt -> 6
AccumulatorThread t1 = new AccumulatorThread();
t1.setAccum(accumInt);
t1.setValueToAdd(5);
AccumulatorThread t2 = new AccumulatorThread();
t2.setAccum(accumInt);
t2.setValueToAdd(7);
new Thread(t1).start();
new Thread(t2).start();
System.out.println(accumInt.value()); // 11 or 13 or 18
AccumlatorThread
클래스 :
class AccumulatorThread implements Runnable {
Accumulator<Integer> accum;
Integer valueToAdd;
public Integer getValueToAdd() {
return valueToAdd;
}
public void setValueToAdd(Integer valueToAdd) {
this.valueToAdd = valueToAdd;
}
public Accumulator<Integer> getAccum() {
return accum;
}
public void setAccum(Accumulator<Integer> accum) {
this.accum = accum;
}
public void run() {
System.out.println("Value to Add in Thread : "+valueToAdd);
accum.add(valueToAdd);
}
}
동작이 안전하게 스레드 아니라는 것을 보여줍니다. 내가 놓친 게 있니?
로컬 모드에서 테스트를 실행해도 상관이 없습니까? –
드라이버와 유일한 실행 프로그램이 분리되어 있기 때문에 (동일한 JVM에서 작동합니다.) –