IT 정보/자바/JSP/EJB

[자바/SCJP/JAVA]자바 프로그래밍 - 라운드 로빈 스케쥴러

김윤석 2007. 12. 18. 14:27

[자바/SCJP/JAVA]자바 프로그래밍 - 라운드 로빈 스케쥴러

 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA

RoundRobin 방식으로 스케쥴링하기

CircularList.java 파일
     1  public class CircularList {
     2      Node head, nil;
     3      Node current;
     4
     5      public CircularList() {
     6          head = null;
     7          nil = null;
     8          current = null;
     9      }
    10
    11      public synchronized Object getNext() {
    12          if(current == null) {
    13              current = head;
    14          } else {
    15              current = current.next;
    16          }
    17          if(current == null) {
    18              current = head;
    19          }
    20          if(current != null)
    21              return current.value;
    22          else
    23              return null;
    24      }
    25
    26      public synchronized void insert(Object o) {
    27          if(head == null) {
    28              Node node = new Node(o);
    29              head = node;
    30              nil = node;
    31          } else {
    32              Node node = new Node(o);
    33              Node temp = nil;
    34              nil = node;
    35              temp.next = nil;
    36          }
    37      }
    38
    39      public void delete(Object o) {
    40          Node temp1 = head;
    41          Node temp2 = null;
    42
    43          while(temp1 != null) {
    44              if(temp1.value == o) {
    45                  if(temp2 == null) {
    46                      head = temp1.next;
    47                  } else {
    48                      temp2.next = temp1.next;
    49                  }
    50                  break;
    51              }
    52              temp2 = temp1;
    53              temp1 = temp1.next;
    54          }
    55      }
    56
    57      public class Node {
    58          Object value;
    59          Node   next;
    60
    61          public Node(Object o) {
    62              value = o;
    63              next = null;
    64          }
    65      }
    66  }


Scheduler.java 파일
     1  public class Scheduler extends Thread {
     2      private  int timeslice;
     3      static  private  CircularList  threads;
     4
     5      static {
     6          threads = new CircularList();
     7      }
     8
     9      public  Scheduler(int t) {
    10          timeslice = t;
    11          setDaemon(true);
    12          start();
    13      }
    14
    15      static public void addThread(Thread t) {
    16          threads.insert(t);
    17          System.out.println("new thread inserted");
    18          t.setPriority(2);
    19      }
    20
    21      static public void removeThread(Thread t) {
    22          if(t.isAlive())
    23              t.setPriority(5);
    24          threads.delete(t);
    25      }
    26
    27      public void run() {
    28          Thread current;
    29          setPriority(6);
    30          while(true) {
    31              current = (Thread) threads.getNext();
    32              if(current == null) {
    33                  System.out.println("Scheduling is done...");
    34                  continue;
    35              }
    36              if(current.isAlive()) {
    37                  current.setPriority(4);
    38              } else {
    39                  removeThread(current);
    40              }
    41              //System.out.println("Scheduler running");
    42              try {
    43                  Thread.sleep(timeslice);
    44              } catch (InterruptedException ie) {
    45                  System.out.println("Thread interrupted.");
    46              }
    47              if(current.isAlive()) {
    48                  current.setPriority(2);
    49              } else {
    50                  removeThread(current);
    51              }
    52          }
    53      }
    54  }

Task.java 파일
     1  class  Task extends Thread {
     2      String  id;
     3
     4      public Task(String s) {
     5          id = s;
     6          Scheduler.addThread(this);
     7      }
     8
     9      public void run() {
    10          for(int i =0; i < 10 ; i++) {
    11              doCalc(i);
    12              System.out.println(id+":"+getPriority());
    13          }
    14      }
    15
    16      public void doCalc(int n) {
    17          for(int i = 0; i < n*200000; i++)
    18                  ;
    19      }
    20  }

App.java 파일
     1  class App {
     2      public static void main(String args[]) {
     3          Task  t1, t2, t3;
     4          Scheduler c = new Scheduler(100);
     5          t1 = new Task("T1");
     6          t2 = new Task("T2");
     7          t3 = new Task3("T3");
     8
     9          t1.start();
    10          t2.start();
    11          t3.start();
    12      }
    13  }
    14
    15  class Task3 extends Task {
    16
    17      public Task3(String id) {
    18          super(id);
    19      }
    20
    21      public void run() {
    22          for(int i =0; i < 10 ; i++) {
    23              doCalc(i);
    24              System.out.println("Task3 id ="+id + ":"+getPriority());
    25          }
    26      }
    27
    28      public void doCalc(int n) {
    29          for(int i = 0; i < n*200000; i++)
    30              ;
    31      }
    32
    33  }

결과
% java App
new thread inserted
new thread inserted
new thread inserted
T1:4
T2:4
T2:4
Task3 id =T3:4
Task3 id =T3:4
T1:4
T2:4
Task3 id =T3:4
T1:4
T2:4
Task3 id =T3:4
T1:4
T1:4
T2:4
Task3 id =T3:4
T1:4
T2:4
Task3 id =T3:4
T1:4
T2:4
Task3 id =T3:4
T1:4
T2:4
Task3 id =T3:4
Task3 id =T3:4
T1:4
T2:4
T1:4
T2:4
Task3 id =T3:2

추천학원:

http://www.it-bank.or.kr/prom/java_main.htm

 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA 자바/SCJP/JAVA