스레드 클래스에는 start () 및 run () 메소드가 포함되어 있습니까? 이 장에서는 이에 답할 것입니다. 이 장의 내용에는 다음이 포함됩니다.
start ()와 run ()의 차이에 대한 설명
start ()와 run ()의 차이의 예
start () 및 run ()과 관련된 소스 코드 (JDK1.7.0_40 기반)
start ()와 run ()의 차이에 대한 설명
start () : 함수는 새 스레드를 시작하는 것이며 새 스레드는 해당 run () 메소드를 실행합니다. start ()는 반복적으로 호출 할 수 없습니다.
run () : run ()은 일반 멤버 메소드처럼 반복적으로 호출 할 수 있습니다. run ()을 별도로 호출하면 현재 스레드에서 run ()가 실행되며 새 스레드가 시작되지 않습니다!
다음은 설명 할 코드입니다.
코드 사본은 다음과 같습니다.
클래스 Mythread는 스레드를 확장합니다 {
public void run () {
...
}
};
Mythread Mythread = New Mythread ();
Mythread.start ()는 새 스레드를 시작하고 새 스레드에서 run () 메소드를 실행합니다.
mythread.run ()은 현재 스레드에서 run () 메소드를 직접 실행하며 run ()을 실행하기 위해 새 스레드를 시작하지 않습니다.
start ()와 run ()의 차이의 예
아래에서 간단한 예제로 그들 사이의 차이점을 보여줍니다. 소스 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
public synchronized void start () {
// 스레드가 "준비"되지 않으면 예외가 발생합니다!
if (ThreadStatus! = 0)
새로운 불법 스레드 스테이트 exception ()을 던지십시오.
// ThreadGroup에 스레드를 추가합니다
group.add (this);
부울 시작 = 거짓;
노력하다 {
// start0 ()을 통해 스레드 시작
start0 ();
// 시작 태그를 설정합니다
시작 = 참입니다.
} 마지막으로 {
노력하다 {
if (! 시작) {
Group.threadStartFailed (this);
}
} catch (던질 수있는 무시) {
}
}
}
실행 결과 :
코드 사본은 다음과 같습니다.
메인 전화 mythread.run ()
메인이 실행 중입니다
메인 전화 mythread.start ()
신화가 실행 중입니다
결과 설명 :
(01) thread.currentthread (). getName ()은 "현재 스레드"를 얻는 데 사용되는 이름입니다. 현재 스레드는 CPU에서 실행될 예정인 스레드를 나타냅니다.
(02) Mythread.run ()은 "Main Thread Main"에서 호출되고 run () 메소드는 "Main Thread Main"에서 직접 실행됩니다.
(03) Mythread.start ()는 "스레드 Mythread"가 시작되면 run () 메소드가 "스레드 Mythread"에서 실행됩니다.
start () 및 run ()과 관련된 소스 코드 (JDK1.7.0_40 기반)
thread.java의 start () 메소드의 소스 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
public synchronized void start () {
// 스레드가 "준비"되지 않으면 예외가 발생합니다!
if (ThreadStatus! = 0)
새로운 불법 스레드 스테이트 exception ()을 던지십시오.
// ThreadGroup에 스레드를 추가합니다
group.add (this);
부울 시작 = 거짓;
노력하다 {
// start0 ()을 통해 스레드 시작
start0 ();
// 시작 태그를 설정합니다
시작 = 참입니다.
} 마지막으로 {
노력하다 {
if (! 시작) {
Group.threadStartFailed (this);
}
} catch (던질 수있는 무시) {
}
}
}
참고 : start ()는 실제로 로컬 메소드 start0 ()을 통해 스레드를 시작합니다. start0 ()는 새 스레드를 실행하고 새 스레드는 run () 메소드를 호출합니다.
코드 사본은 다음과 같습니다.
개인 기본 void start0 ();
thread.java의 run () 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
public void run () {
if (target! = null) {
target.run ();
}
}
설명 : 대상은 런닝 가능한 객체입니다. run ()은 스레드 스레드의 runnable 멤버의 run () 메소드를 직접 호출하고 새 스레드를 생성하지 않습니다.