메서드 동시호출에대해서요.
두힘
public int[] data(int a){
int[] data = new int[a];
for(int i=0; idata.length; i++){
data[i] = Math.random();
}
return data;
}
이런 메서드가 있을때
적은 량이라면 상관없지만 만약 1억개의 데이터를 넣는다고 가엊했을때
그것에대해 소요되는 시간은 꽤 긴데
그렇다면A쓰레드와 B쓰레드가
A: data(1000000);
B: data(10000000);이라고 동시에 입력햇다고 가정합니다.
그러면 data메서드는 a쓰레드에서 받은 신호를 따로 처리하고, b쓰레드에서 받은 신호를 따로 처리하는
독립적인 형태의 처리방식을 가진 뒤 산출하나요?
아니면 중간에 복합되던가해서 에러가 나나요?
synchronized방식은 알고있지만 그걸써선 안되는상황이라;
-
수국
흠.. 제가 보기엔.. A 스레드와 B 스레드는 서로 전혀 간섭하지 않습니다.
스레드에서 객체나 클래스의 필드를 공유할때에 synchronized를 사용하게 됩니다.
하지만 위의 코드는 객체나 클래스의 필드를 공유하지 않습니다.
해당 메소드 내에서 새로운 배열 객체를 생성하게 됩닏.
이때 메소드내에서 사용되어지는 변수들은 스레드마다 따로 유지되기 때문에, 서로 간섭할 수 조차 없습니다. 자세한것은 Thread에 대해서 알아 보시면 될 듯합니다. ^_ -
세련
디자인 패턴중에 싱글턴쪽을 찾아보면 싱크로 맞추는거 말고
일 부분만 맞추는 방식이 가장 선호된다고 되있는걸 봤었는데 기억이 잘 안나네요^^;
물론 그게 시온스님이 하시려는 방법에는 안맞을 수도 있지만 ㅎ;
아 그리고 질문내용은 data 의 메소드를.... 뭐 상관없다면 다른객체를 사용해서 하면
되지 않을까 하네요^^;