[자바 - 다 중 스 레 드] "기본 편" 03 의 Thread 에서 start () 와 run () 의 차이

개요 Thread 클래스 는 start () 와 run () 방법 을 포함 하 는데 그 차 이 는 무엇 입 니까?이 장 에 서 는 이에 대해 해답 을 할 것 이다.이 장의 내용 은 start () 와 run () 의 차이 점 설명 start () 와 run () 의 차이 점 예제 start () 와 run () 관련 소스 코드 (JDK 1.7.0 40 기반) 의 전재 출처 를 밝 혀 주 십시오.http://www.cnblogs.com/skywang12345/p/3479083.html
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 () 방법 으로 스 레 드 를 새로 만 들 지 않 습 니 다.

좋은 웹페이지 즐겨찾기