JAVA(Sol)(정리대기중..언젠가)
210423_5(동시스레드 우선순위)
너굴셉
2021. 4. 23. 15:15
우선순위 부여하기
특정 스레드에는 우선권을 부여하기
static int Max_PRIORITY : 10 높다
static int MIN_PRIORITY : 1 낮음
static int NORM_PRIORITY : 5 보통
부여할때
void setPriority (int priority);
setPriority(10);
setPriority(5);
setPriority(1);
setPriority(5);
거북이1 ===> 우선순위가 없다면 1번이 먼저도착할 확률이 높다.
setPriority(5);
거북이2
setPriority(10);
거북이3 ===> 우선순위 적용되면 3번이 먼저 도착할 확률이 높다
package chapter16;
//우선순위가 적용된 경우
class RunThread3 extends Thread {
public RunThread3(String name) {
super(name);
}
public void run() {
for (int i = 1; i <= 5000; i++) {
if (i % 50 == 0)
System.out.println("Thread[" + getName() + "] :" + i);
}
}
}
public class SchedulingTest3 {
public static void main(String[] args) {
Thread[] t = new RunThread3[3];
t[0] = new RunThread3("☆");
t[1] = new RunThread3("◎");
t[2] = new RunThread3("●");
t[0].start();
t[0].setPriority(10); // 먼저끝날확률이 높다
t[1].start();
t[1].setPriority(5); // (5)syso메서드와 우선순위가 비슷하다
t[2].start();
t[2].setPriority(1);
System.out.println("Thread.MAX_PRIORITY" + Thread.MAX_PRIORITY);//내장상수(대문자)
System.out.println("Thread.NORM_PRIORITY" + Thread.NORM_PRIORITY);
System.out.println("Thread.MIN_PRIORITY" + Thread.MIN_PRIORITY);
System.out.println("t[0]" + t[0].getPriority());
System.out.println("t[1]" + t[1].getPriority());
System.out.println("t[2]" + t[2].getPriority());
}
}
주의
동시성 sleep()과 우선순위 setPriority()는 같이 사용하면 안된다
서로가 서로를 방해한다.
package chapter16;
//동기화와 우선순위는 함께 사용하지 않는다
class RunThread4 extends Thread {
public RunThread4(String name) {
super(name);
}
public void run() {
for (int i = 1; i <= 5000; i++) {
if (i % 50 == 0)
System.out.println("Thread[" + getName() + "]." + i);
try {
sleep(1); // 동시성(동기화)
} catch (InterruptedException e) {
}
}
}
}
public class SchedulingTest4 {
public static void main(String[] args) {
Thread[] t = new RunThread4[3];
t[0] = new RunThread4("☆");
t[1] = new RunThread4("★");
t[2] = new RunThread4("○");
t[0].start();
t[0].setPriority(10); // 동기화와 우선순위는 함께 사용하지 않는다
t[1].start();
t[1].setPriority(5);
t[2].start();
t[2].setPriority(1);
}
}
//동시성 적용은 됐는데, 처리가 느리가되는게 눈에보이는정도