스레드에서 시작 방법과 실행 메소드의 차이
스레드에서 시작 메소드가 실행 메소드를 차례로 호출하면 왜 시작 방법을 호출하기로 선택합니까? 또는 Java 스레드에서 시작 방법과 실행 메소드의 차이점은 무엇입니까? 이 두 질문은 초보자 수준에서 매우 인기있는 멀티 스레드 인터뷰 질문입니다. Java 프로그래머가 스레드를 학습하기 시작하면 먼저 스레드 클래스를 상속 받거나 실행 방법에 과부하 또는 실행 가능한 인터페이스를 구현하고 실행 메소드를 구현 한 다음 스레드 인스턴스의 시작 메소드를 호출하는 방법을 배웁니다. 그러나 그는 경험이 몇 명있는 후에, 그는 시작 방법이 API 문서 나 다른 방법을 보면서 내부적으로 실행 방법을 호출한다는 것을 알게 될 것이지만, 우리 중 많은 사람들이 인터뷰 중에 우리가 요청을받을 때, 우리는이 질문의 중요성을 깨닫게 될 것임을 알고 있습니다. 이 Java 튜토리얼에서는 Java에서 스레드를 시작할 때 시작 방법과 실행 방법의 차이점을 이해합니다.
이 게시물은 Java Multithreading에 게시 된 일부 기사, 예를 들어 Java의 Runnable과 스레드의 차이와 Blockingqueue를 사용하여 Java의 생산자 소비자 문제를 해결하는 방법에 대한 게시물 스크립트입니다. 아직 읽지 않았다면 흥미롭고 유용하다는 것을 알 수 있습니다.
Java 스레드에서 시작과 실행의 차이점
시작과 실행 방법의 주요 차이점은 프로그램이 시작 메소드를 호출하면 새 스레드가 생성되고 실행 메소드의 코드가 새 스레드에서 실행된다는 것입니다. 그러나 실행 메소드를 직접 호출하면 프로그램이 새 스레드를 생성하지 않으며 실행 메소드 내부의 코드가 현재 스레드에서 실행됩니다. 대부분의 경우 런 메소드를 호출하는 것은 버그 또는 실수입니다. 발신자의 원래 의도는 새 스레드를 시작하기 위해 시작 방법을 호출하는 것이기 때문에이 오류는 Fingbugs와 같은 많은 정적 코드 커버리지 도구로 감지 할 수 있습니다. 많은 시간이 걸리는 작업을 실행하려면 시작 방법을 사용하는 것이 가장 좋습니다. 그렇지 않으면 실행 메소드를 호출 할 때 기본 스레드가 갇히게됩니다. 또 다른 차이점은 스레드가 시작되면 스레드 객체의 시작 메소드를 반복적으로 호출 할 수 없다는 것입니다. 이미 시작된 스레드의 시작 메소드를 호출하면 불법 스테이트 exception 예외가보고되지만 런 메소드를 반복해서 호출 할 수 있습니다.
다음은 시작 방법의 데모와 실행 메소드입니다.
스레드의 작업은 문자열 값으로 전달 된 현재 스레드의 이름을 인쇄하는 것입니다.
여기서 우리는 둘 사이의 차이점을 명확하게 볼 수 있습니다.
public class diffbewteenstartandrun {public static void main (String args []) {system.out.println (thread.currentthread (). getName ()); // 시작 및 실행을위한 두 스레드 만들기 메소드 호출 스레드 struch strestthread = 새 스레드 (새 작업 ( "start")); 스레드 runthread = 새 스레드 (새 작업 ( "run")); startThread.start (); // 스레드의 시작 메소드 호출 - // new 스레드 runthread.run ()에서 실행됩니다. // 스레드의 실행 메소드 호출 - // current stread}/ * * 간단한 실행 가능한 구현 */ private static class task emplements runnable {private string caller; 공개 작업 (문자열 발신자) {this.caller = 발신자; } @override public void run () {system.out.println ( "발신자 :" + 발신자 + "및 코드는 다음과 같이 실행됩니다. }}}읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!