ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 210423_5(동시스레드 우선순위)
    JAVA(Sol)(정리대기중..언젠가) 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에서도 처리느림

     

    'JAVA(Sol)(정리대기중..언젠가)' 카테고리의 다른 글

    210423_7패키지(package)  (0) 2021.04.23
    210423_6(syncronized 동기화)  (0) 2021.04.23
    210423_3~4(멀티스레드)  (0) 2021.04.23
    210423_2(throws,throw)  (0) 2021.04.23
    210423_1(예외_Exception)  (0) 2021.04.23
Designed by Tistory.