[자바/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 자바/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