<!--StartFragment-->
문제는
다음 프로그램을 객체형 Callback 방식으로 구성하시오.
Caller.java
50개의 스레드를 생성하여 발진시킨다. 스레드는 1~50까지의 스레드 번호를 가진다.
void getAverage()라는 callback용 메소드를 가진다.
평균을 구하는 스레드로부터 평균을 인수하여 인쇄하되 반드시 평균을 구한 스레드의 번호를 함께 인쇄한다.
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Callee.java
스레드
0~1 범위의 1000개의 난수를 발생시켜 평균을 구하는 일을 함.
Caller 객체의 getAverage()를 callback하여 Caller에게 평균을 인계함.
/*Calle.java*/
public class Callee implements Runnable {
private Caller callbackEvent;
private int taskNumber;
public Callee(Caller event, int number){
callbackEvent = event;
taskNumber = number;
}
public void run() {
callbackEvent.getAverage(taskNumber);
}
}
/*Caller.java*/
public interface Caller
{
public void getAverage(int taskNumber);
}
/* TestCallerCallee.java */
import java.util.Random;
import java.lang.Thread;
public class TestCallerCallee {
public static void main(String[] args) {
Caller caller = new Caller(){
public void getAverage(int taskNumber) {
// 0.0~1.0
Random generator = new Random();
double sum = 0.0;
double average = 0.0;
for (int i = 0; i<1000; i++)
sum +=generator.nextDouble();
average = sum / 1000;
System.out.printf("Thread[%d] / average= %f
", taskNumber,average);
}
};
Thread[] thread = new Thread[51];
for (int j = 1 ; j <= 50; j++) {
thread[j] = new Thread( new Callee(caller,j));
thread[j].start();
}
}
}
이렇게 하는거 맞나요?
보기만 하세요
뭐?
제가 문제를 이해 못한건지.. 평균값이 50개가 떠야 맞는건가요?
평균을 구하는 스레드로부터 평균을 인수하여 인쇄하되 반드시 평균을 구한 스레드의 번호를 함께 인쇄한다. // 평균 옆에 스레드 번호 찎어주기
플롯이 아니라 더블을 써야하는군요
안드로장님 시간 내주셔서 감사합니다. 이 소스 기반으로 제 소스의 문제점 찾아볼게요.
근데 맞는건지 모르곘어요. 저도 자바를 배우고있는중이라서요. 혹시 틀릴지도 모르니깐 다른분들에게 물어보세요.