Java 스레드 클래스는 객체 클래스이며 인스턴스는 java.lang.thread 또는 하위 클래스에서 상속됩니다. 다음 방법으로 Java로 스레드를 만들 수 있습니다. 스레드를 실행하면 스레드의 start () 메소드를 호출 할 수 있습니다.
트레드 스레드 = 새 스레드 ();
thread.start ();
위의 예에서는 스레드에 대한 실행 코드를 작성하지 않았으므로 메소드를 호출 한 후 스레드가 종료됩니다.
스레드가 실행될 때 실행되는 코드를 작성하는 두 가지 방법이 있습니다. 하나는 스레드 서브 클래스의 인스턴스를 작성하고 실행 메소드를 재정의하는 것이며, 두 번째는 클래스를 만들 때 실행 가능한 인터페이스를 구현하는 것입니다. 다음 으로이 두 가지 방법을 자세히 설명합니다.
스레드의 서브 클래스를 만듭니다
스레드 서브 클래스의 인스턴스를 작성하고 실행 메소드를 재정의하십시오. 시작 () 메소드를 호출 한 후 실행 메소드가 실행됩니다. 위의 스레드 서브 클래스의 예는 다음과 같은 방식으로 생성하고 실행할 수 있습니다.
public class mythread는 스레드 {public void run () {system.out.println ( "Mythread Running"); }} mythread mythread = new Mythread (); mytread.start ();스레드가 시작되면 시작 메소드가 즉시 돌아 오며 반환하기 전에 실행 메소드가 실행될 때까지 대기하지 않습니다. 런 메소드가 다른 CPU에서 실행되는 것과 같습니다. 실행 메소드가 실행되면 문자열 Mythread 실행이 인쇄됩니다.
다음과 같이 익명의 스레드의 서브 클래스를 만들 수도 있습니다.
스레드 스레드 = 새 스레드 () {public void run () {System.out.println ( "스레드 실행"); }}; thread.start ();새 스레드의 실행 메소드가 실행되면 컴퓨터는 문자열 "스레드 running"을 인쇄합니다.
실행 가능한 인터페이스 구현
스레드 실행 코드를 작성하는 두 번째 방법은 java.lang.runnable 인터페이스를 구현하는 클래스의 새 인스턴스를 작성하는 것입니다. 인스턴스의 메소드를 스레드에서 호출 할 수 있습니다. 다음은 예입니다.
공개 클래스 Myrunnable Pemple runnable {public void run () {System.out.println ( "myrunnable Running"); }}스레드가 run () 메소드를 실행하려면 myrunnable의 인스턴스 개체를 스레드 클래스의 생성자로 전달해야합니다. 예는 다음과 같습니다.
스레드 스레드 = 새 스레드 (new myrunnable ());
thread.start ();
스레드가 실행되면 실행 가능한 인터페이스를 구현하는 실행 메소드를 호출합니다. 위의 예에서 "Myrunnable Running"이 인쇄됩니다.
마찬가지로 아래와 같이 런닝 가능한 인터페이스를 구현하는 익명 클래스를 만들 수 있습니다.
runnable myrunnable = new Runnable () {public void Run () {System.out.println ( "runnable Running"); }} 스레드 스레드 = 새 스레드 (myrunnable); ride.start ();서브 클래스를 생성하거나 런닝 가능한 인터페이스를 구현 하시겠습니까?
이 두 방법 중 어느 것이 더 나은지에 대한 명확한 답은 없으며 요구 사항을 충족시킬 수 있습니다. 개인적으로, 나는 런닝 가능한 인터페이스 방법을 구현하는 것을 선호합니다. 스레드 풀이 실행 가능한 인터페이스를 구현하는 스레드를 효과적으로 관리 할 수 있으므로 스레드 풀이 가득 찬 경우 스레드 풀이 유휴 상태가 될 때까지 새 스레드가 실행되기 위해 대기열이 발생합니다. 스레드 서브 클래스를 구현하여 스레드가 구현되면 이는 조금 더 복잡해집니다.
때로는 실행 가능한 인터페이스와 스레드 서브 클래스를 동시에 구현하는 두 가지 방법을 통합해야합니다. 예를 들어, 스레드 서브 클래스를 구현하는 인스턴스는 실행 가능한 인터페이스를 구현하는 여러 스레드를 실행할 수 있습니다. 일반적인 응용 프로그램은 스레드 풀입니다.
일반적인 오류 : start () 메소드 대신 run () 메소드를 호출
스레드를 작성하고 실행하여 저지른 일반적인 실수는 다음과 같이 start () 메소드 대신 스레드의 run () 메소드를 호출하는 것입니다.
스레드 newthread = new Thread (myrunnable ());
newthread.run (); // start ()이어야합니다 ();
처음에는 Run () 메소드가 실제로 원하는대로 호출되기 때문에 잘못된 느낌이 들지 않습니다. 그러나 실제로 Run () 메소드는 방금 생성 한 새 스레드에 의해 실행되지 않지만 새 스레드를 생성 한 현재 스레드에 의해 실행됩니다. 즉, 위의 두 줄의 코드를 실행하는 스레드에 의해 실행됩니다. 생성 된 새 스레드가 run () 메소드를 실행하려면 새 스레드의 시작 방법을 호출해야합니다.
스레드 이름
스레드를 만들 때 스레드에 이름을 줄 수 있습니다. 그것은 우리가 다른 스레드를 구별하는 데 도움이됩니다. 예를 들어 : 여러 스레드가 System.out에 기록되면 스레드 이름을 통해 출력되는 스레드를 쉽게 찾을 수 있습니다. 예는 다음과 같습니다.
myrunnable runnable = new myrunnable (); 스레드 스레드 = 새 스레드 (runnable, "new Thread"); thread.start (); system.out.println (thread.getName ());
myrunnable은 스레드의 서브 클래스가 아니기 때문에 myrunnable 클래스에는 getName () 메소드가 없습니다. 다음과 같은 방법으로 현재 스레드에 대한 참조를 얻을 수 있습니다.
thread.currentthread ();
String ThreadName = thread.currentThread (). getName ();
예제 스레드 코드 :
다음은 작은 예입니다. 먼저 main () 메소드의 스레드 이름을 출력하십시오. 이 스레드는 JVM에 의해 할당됩니다. 그런 다음 10 개의 스레드를 열고 1 ~ 10의 이름을 지정하십시오. 각 스레드는 자체 이름을 출력 한 후 종료됩니다.
public class tride example {public static void main (string [] args) {system.out.println (thread.currentthread (). getName ()); for (int i = 0; i <10; i ++) {새 스레드 ( "" + i) {public void run () {system.out.println ( "스레드 :" + getName () + "running"); } }.시작(); }}}시동 스레드 순서가 주문되지만 실행 순서는 순서가 순서가되지 않습니다. 즉, 스레드 1이 반드시 이름을 콘솔에 출력 한 첫 번째 스레드는 아닙니다. 스레드는 순차적으로보다 병렬로 실행되기 때문입니다. JVM과 운영 체제는 스레드의 실행 순서를 결정하며, 그 순서는 스레드의 시작 순서와 반드시 동일하지는 않습니다.
위는 Java 스레드가 작성한 정보를 편집 한 것입니다. 우리는 향후 관련 정보를 계속 추가 할 것입니다. 이 웹 사이트를 지원 해주셔서 감사합니다!