<!--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();   
  } 
  
 }
}

이렇게 하는거 맞나요?