java 라인에서 start 방법과run 방법의 차이에 대한 상세한 소개

2718 단어 java라인startrun
스레드에서start방법과run방법의 차이
라인에서, 만약start 방법이 순서대로 run 방법을 호출한다면, 왜 우리는 start 방법을 호출하는 것을 선택합니까?아니면 자바 라인에서 start 방법과run 방법의 차이점은 무엇입니까?이 두 가지 문제는 매우 유행하는 초보자급 다선정 면접 문제다.자바 프로그래머가 라인을 배우기 시작할 때, 그들은 먼저 Thread 클래스를 계승하고, run 방법을 다시 불러오거나, Runnable 인터페이스를 실현하고, run 방법을 실현하고, Thread 실례의 start 방법을 호출하는 것을 배운다.그러나 경험을 가진 후에 API 문서나 다른 경로를 보면 start 방법 내부에서run 방법이 호출된다는 것을 알 수 있지만 우리 중 많은 사람들이 면접에서 질문을 받았을 때 이 문제의 중요성을 깨닫게 된다.이 자바 강좌에서, 우리는 자바에서 라인을 열 때 start 방법과run 방법의 다른 점을 알게 될 것이다
이 글은 우리가 다시 자바 다중 스레드에서 발표한 일부 글의 뒷부분입니다. E.G. Difference between Runnable and Thread in Java AND How to solve Producer Consumer problem in Java using BlockingQueue.만약 네가 아직 그들을 읽지 않았다면, 너는 그들이 여전히 매우 재미있고 유용하다는 것을 발견할 수 있을 것이다
자바 라인에서start와run의 차이
start와run방법의 주요 차이점은 프로그램이 start방법을 호출할 때 새로운 라인이 생성되고, run방법의 코드는 새로운 라인에서 실행되지만, 당신이 직접 run방법을 호출할 때 프로그램은 새로운 라인을 만들지 않으며, run방법 내부의 코드는 현재 라인에서 실행됩니다.대부분의 경우run 방법을 호출하는 것은 버그나 실수로 변한다.호출자의 취지는 start 방법을 호출하여 새로운 라인을 여는 것이기 때문에, 이 오류는fingbugs와 같은 많은 정적 코드 덮어쓰기 도구에 의해 검출될 수 있습니다.만약 당신이 많은 시간을 소모하는 작업을 실행하고 싶다면, start 방법을 사용하는 것이 좋습니다. 그렇지 않으면, run 방법을 호출할 때, 당신의 주 라인이 끊길 것입니다.또 다른 차이점은 하나의 스레드가 시작된다는 것입니다. 이thread 대상의 start 방법을 반복해서 호출할 수 없습니다. 이미 시작된 스레드를 호출하는 start 방법은 Illegal State Exception 이상을 보고하지만, run 방법을 반복해서 호출할 수 있습니다.
다음은 start 방법과 run 방법의 데모입니다.
스레드에서 작업은 스레드에 전송된 String 값이 현재 스레드의 이름을 인쇄하는 것입니다.
여기서 양자의 차이를 명확하게 볼 수 있다



public class DiffBewteenStartAndRun { 
 
 
  public static void main(String args[]) { 
 
 
    System.out.println(Thread.currentThread().getName()); 
    // creating two threads for start and run method call 
    Thread startThread = new Thread(new Task("start")); 
    Thread runThread = new Thread(new Task("run")); 
 
 
    startThread.start(); // calling start method of Thread - will execute in 
                // new Thread 
    runThread.run(); // calling run method of Thread - will execute in 
              // current Thread 
 
 
  } 
 
 
  /* 
   * Simple Runnable implementation 
   */ 
  private static class Task implements Runnable { 
    private String caller; 
 
 
    public Task(String caller) { 
      this.caller = caller; 
    } 
 
 
    @Override 
    public void run() { 
      System.out.println("Caller: " + caller 
          + " and code on this Thread is executed by : " 
          + Thread.currentThread().getName()); 
 
 
    } 
  } 
} 

읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기