자바 기본 강좌의Thread에서start()와run()의 차이 자바 다중 강좌
start () 와run () 의 차이는 start () 를 설명합니다. start () 의 역할은 새로운 라인을 시작하는 것입니다. 새 라인은 상응하는 run () 방법을 실행합니다.start () 는 중복 호출될 수 없습니다.run (): run () 은 일반적인 구성원 방법과 마찬가지로 중복 호출될 수 있습니다.run () 을 단독으로 호출하면 현재 라인에서 run () 을 실행하고 새 라인을 시작하지 않습니다!
다음은 코드로 설명합니다.
class MyThread extends Thread{
public void run(){
...
}
};
MyThread mythread = new MyThread();
mythread.start () 는 새 라인을 시작하고 run () 방법을 실행합니다.mythread.run () 은 현재 라인에서 run () 방법을 직접 실행하고, run () 을 실행하기 위해 새 라인을 시작하지 않습니다.start () 와run () 의 차이 예시 아래에서 간단한 예시를 통해 그들 사이의 차이를 보여 줍니다.소스 코드는 다음과 같습니다.
public synchronized void start() {
// " ", !
if (threadStatus != 0)
throw new IllegalThreadStateException();
// ThreadGroup
group.add(this);
boolean started = false;
try {
// start0()
start0();
// started
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
}
}
}
실행 결과:
main call mythread.run()
main is running
main call mythread.start()
mythread is running
결과 설명: (01) Thread.currentThread().getName () 은 현재 스레드를 가져오는 데 사용되는 이름입니다.현재 스레드는 cpu에서 실행 중인 스레드를 가리킨다.(02) mythread.run () 은 "주선main"에서 호출되며, 이 run () 방법은 "주선main"에서 직접 실행됩니다.(03) mythread.start () 는 "스레드 mythread"를 시작하고, "스레드 mythread"가 시작되면 run () 방법을 호출합니다.이때run () 방법은'선정 mythread'에서 실행됩니다.start() 및 run() 관련 소스(JDK1.7.0_40 기반)Thread.java에서 start() 메서드의 소스 코드는 다음과 같습니다.
public synchronized void start() {
// " ", !
if (threadStatus != 0)
throw new IllegalThreadStateException();
// ThreadGroup
group.add(this);
boolean started = false;
try {
// start0()
start0();
// started
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
}
}
}
설명: start () 는 실제로 로컬 방법인 start0 () 을 통해 라인을 시작합니다.start0 () 은 하나의 라인을 새로 실행하고, 새 라인은run () 방법을 호출합니다.
private native void start0();
Thread.java의 run() 코드는 다음과 같습니다.
public void run() {
if (target != null) {
target.run();
}
}
설명: target은 Runnable 대상이다.run()은 Thread 스레드를 직접 호출하는 Runnable 구성원의 run() 방법입니다. 새로 만들지 않습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 기본 튜토리얼 양보 자바 다중 튜토리얼1. yield() 소개 yield()의 역할은 양보입니다.이것은 현재 스레드가'실행 상태'에서'준비 상태'로 들어가서 같은 우선순위를 가진 다른 대기 스레드가 실행권을 얻도록 할 수 있다.단, 현재 스레드가 yie...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.