[자바 - 다 중 스 레 드] "기본 편" 03 의 Thread 에서 start () 와 run () 의 차이
start () 와 run () 의 차 이 는 start () 를 설명 합 니 다. 새 스 레 드 를 시작 하 는 역할 을 합 니 다. 새 스 레 드 는 해당 하 는 run () 방법 을 실행 합 니 다.start () 는 중복 호출 될 수 없습니다.run (): run () 은 일반적인 구성원 방법 과 마찬가지 로 중복 호출 될 수 있 습 니 다.run () 을 단독으로 호출 하면 현재 스 레 드 에서 run () 을 실행 하고 새 스 레 드 를 시작 하지 않 습 니 다!
다음은 코드 로 설명 하 겠 습 니 다.class MyThread extends Thread{ public void run(){ ... } };MyThread mythread = new MyThread();
my thread. start () 는 새 스 레 드 를 시작 하고 새 스 레 드 에서 run () 방법 을 실행 합 니 다.한편, my thread. run () 은 현재 스 레 드 에서 run () 방법 을 직접 실행 하고 새로운 스 레 드 를 시작 하여 run () 을 실행 하지 않 습 니 다.
start () 와 run () 의 차이 점 예제 아래 간단 한 예제 로 차이 점 을 보 여 줍 니 다.원본 코드 는 다음 과 같 습 니 다.
1// Demo.java
2 class MyThread extends Thread{
3 public MyThread(String name) {
4 super(name);
5 }
6
7 public void run(){
8 System.out.println(Thread.currentThread().getName()+" is running");
9 }
10 };
11
12 public class Demo {
13 public static void main(String[] args) {
14 Thread mythread=new MyThread("mythread");
15
16 System.out.println(Thread.currentThread().getName()+" call mythread.run()");
17 mythread.run();
18
19 System.out.println(Thread.currentThread().getName()+" call mythread.start()");
20 mythread.start();
21 }
22 }
실행 결과: main call mythread. run () main is runningmain call mythread. start () mythread 가 실행 중 입 니 다.
결과 설명: (01) Thread. currentThread (). getName () 은 '현재 스 레 드' 의 이름 을 가 져 오 는 데 사 용 됩 니 다.현재 스 레 드 는 cpu 에서 실행 중인 스 레 드 를 말 합 니 다.(02) my thread. run () 은 '메 인 스 레 드 main' 에서 호출 되 었 으 며, 이 run () 방법 은 '메 인 스 레 드 main' 에서 직접 실 행 됩 니 다.(03) my thread. start () 는 '스 레 드 my thread' 를 시작 하고 '스 레 드 my thread' 가 시작 되면 run () 방법 을 호출 합 니 다.이때 run () 방법 은 '스 레 드 my thread' 에서 실 행 됩 니 다.
start () 와 run () 관련 소스 코드 (JDK 1.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 () 는 실제로 로 컬 방법 start 0 () 을 통 해 스 레 드 를 시작 합 니 다.start 0 () 은 스 레 드 를 새로 실행 하고 새 스 레 드 는 run () 방법 을 호출 합 니 다.private native void start0();
Thread. java 에서 run () 의 코드 는 다음 과 같 습 니 다: Public void run () {if (target! = null) {target. run ();}}
설명: target 은 Runnable 대상 입 니 다.run () 은 Thread 스 레 드 를 직접 호출 하 는 Runnable 구성원 의 run () 방법 으로 스 레 드 를 새로 만 들 지 않 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.