>  기사  >  Java  >  자바 스레드 우선순위

자바 스레드 우선순위

WBOY
WBOY원래의
2024-08-30 16:02:56372검색

'가장 작은 처리 단위'라고 불리는 Thread는 수행해야 할 일부 작업이 할당된 가벼운 하위 프로세스입니다. 스레드는 할당된 동일한 메모리 슬롯을 공유하고 서로 독립적이므로 멀티태스킹을 촉진합니다. 그러나 여러 스레드가 공유 메모리 슬롯에서 실행되면 리소스에 대한 경쟁이 발생하게 됩니다. 이러한 경쟁을 피하여 높은 처리량을 달성하기 위해 스레드 우선 순위 지정 개념이 도입되었습니다. 동일한 시스템에서 여러 작업을 실행하는 경우 이는 큰 의미를 갖습니다. "스레드 스케줄러는 우선순위에 따라 실행 스레드를 할당하는 작업을 수행합니다."

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

JVM(JAVA 가상 머신)은 기본적으로 또는 프로그래머가 명시적으로 스레드 우선 순위를 결정합니다. 우선순위 등급은 1에서 10 사이이며, 스레드에 가장 높은 우선순위를 부여하려는 경우 10이 할당됩니다. 컨텍스트 전환 변경은 우선순위 순서에 따라 스레드 1에서 스레드 2로 전환하는 데 도움이 됩니다.

참고: 두 개 이상의 스레드가 동일한 우선순위로 할당될 가능성이 있으며, 그 실행은 운영 체제에 따라 다릅니다. 예를 들어 Windows에서는 라운드 로빈 알고리즘을 사용하여 이 경우를 처리합니다.

Java 스레드 우선순위 변수

JAVA에 매크로 형태로 미리 저장된 세 가지 주요 변수가 아래에 설명되어 있습니다.

  • Public Static int MIN_PRIORITY: 이는 "public" 유형의 액세스 한정자가 있는 정적 변수입니다. 이 변수에는 1의 값이 할당됩니다. 이는 가장 낮은 우선순위의 스레드를 할당하기 위한 것입니다.
  • Public Static int NORM_PRIORITY: 이는 "public" 유형의 액세스 한정자가 있는 정적 변수입니다. 이 변수에는 5의 값이 할당됩니다. 이는 스레드에 보통 우선순위를 할당하기 위한 것입니다. 개발자가 명시적으로 우선순위를 지정하지 않은 경우 기본 우선순위입니다.
  • Public Static int MAX_PRIORITY: 이는 "public" 유형의 액세스 한정자가 있는 정적 변수입니다. 이 변수에는 10의 값이 할당됩니다. 이는 우선순위가 가장 높은 스레드를 할당하기 위한 것입니다.

우선순위 가져오기 및 설정과 관련된 일부 기능은 다음과 같습니다.

  • Public Final int getPriority (): 이 함수는 요청된 스레드의 우선순위를 얻는 데 사용됩니다. 이 함수는 반환 유형이 "int"이므로 정수를 반환합니다. 정수의 범위는 1부터 10까지입니다. 함수는 공개 및 최종입니다.
  • Public Final void setPriority (int newPriority): 이 함수는 요청된 스레드의 우선순위를 설정하는 데 사용됩니다. 이 함수는 정수를 매개변수로 사용하며, 함수 정의의 매개변수 프로토타입에도 동일한 내용이 언급되어 있습니다. 매개변수 정수의 범위는 1~10입니다. 함수는 공개 및 최종입니다.

Java 스레드 우선순위의 예

다음은 Java 스레드 우선순위의 예입니다.

예시 #1

다음은 위에 이미 정의된 변수와 JAVA에서 사용할 수 있는 기성 함수를 사용하여 스레드 우선순위 개념을 보여주는 몇 가지 예입니다.

코드:

public class test extends Thread{
public void run (){
System.out.println ( "The name of thread running curremtly is :"+Thread.currentThread ().getName ());
System.out.println ( "The priority od thread running currently is:"+Thread.currentThread ().getPriority ());
}
public static void main (String args[]){
test t1=new test ();
test t2=new test ();
test t3=new test ();
t1.setPriority (Thread.MIN_PRIORITY);
t2.setPriority (Thread.MAX_PRIORITY);
t3.setPriority (Thread.NORM_PRIORITY);
t1.start ();
t2.start ();
t3.start ();
}
}

출력:

자바 스레드 우선순위

예시 #2

아래는 사용자 정의 우선순위 정의 및 인쇄 예시입니다.

코드:

public class test2 extends Thread
{
public void run ()
{
System.out.println ( " The control is under run function now...");
}
public static void main (String args[])
{
// Here we are creating threads using the constructors.
test2 t1=new test2 ();
test2 t2=new test2 ();
// setpriority () function is used below along with the parameter to set the prioirity.
t1.setPriority (2);
t2.setPriority (9);
// Here we are coding on how to display output strings.
System.out.println ( " The priority assigned to thread t1 is: " + t1.getPriority ());
System.out.println ( "The priority assigned to thread t2 is: " + t2.getPriority ());
// the run () function is defined above will be called via start () function and print the strinf which is there in it.
t1.start ();
}
}

출력:

자바 스레드 우선순위

참고: 우선순위는 엄격하게 1~10 범위에 속해야 합니다. 우선순위가 이 범위를 벗어나는 경우 컴파일러는 아래 오류를 발생시킵니다. setPriority() 함수를 사용하여 스레드 t2의 우선순위를 설정하는 동안 9 대신 13에 우선순위가 주어졌을 때 이 오류가 발생했습니다.

예외:

"main" 스레드의 예외 java.lang.IllegalArgumentException

java.base/java.lang.Thread.setPriority(Thread.java:1141)

test2.main(test2.java:14)

자바 스레드 우선순위의 장점

아래 나열된 멀티스레딩 및 스레드에 우선순위 할당과 관련된 많은 이점이 있습니다.

  • 스레드의 우선순위와 함께 시스템에서 여러 작업을 동시에 수행할 수 있습니다. 예를 들어, 사용자가 인터넷 서핑을 하다가 새 소프트웨어가 설치되자 갑자기 시스템이 중단됩니다. 이 경우 인터넷 서핑보다는 시스템 재시작이 우선입니다.
  • 프로그래머가 스레드 우선순위를 명시적으로 정의하지 않은 경우 JAVA 스레드는 상위 트레드에서 우선순위를 상속합니다. 다운스트림 스레드의 우선순위를 우회하고 대칭성을 유지하는 우선순위가 유지됩니다. 프로그래머가 프로그램을 디버깅하기 쉽게 해줍니다.
  • 코드를 더 간단하게 만들어 유지관리가 쉽습니다.
  • 우선순위를 지정하여 컨텍스트 전환 작업을 훨씬 쉽게 만듭니다.

결론

이것은 동일한 시스템에서 여러 작업을 운영하는 데 널리 사용되며 효율적인 방법 중 하나입니다. 스레드가 메모리를 공유하므로 메모리 효율적인 방법이기도 합니다. 시스템에서 여러 스레드가 실행될 수 있지만 이로 인해 프로세서가 어떤 스레드를 먼저 선택할지 혼란스러울 수 있습니다. 이 문제는 스레드에 우선순위를 할당하여 해결되었습니다. 스레드는 완료되거나 더 높은 우선순위의 스레드에 의해 중단될 때까지 계속 실행됩니다. 이 기능은 운영 체제와 긴밀하게 작동합니다. 음악과 함께 인터넷 서핑과 함께 워드 문서를 준비하는 것은 멀티스레딩이라는 마법 같은 개념이 등장하기 전까지는 그리 효율적이지 않았습니다.

위 내용은 자바 스레드 우선순위의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.