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);

	}

}
//동시성 적용은 됐는데, 처리가 느리가되는게 눈에보이는정도

이게해보고싶었따.. cmd에서도 처리느림