차이점은 다음과 같습니다.
Java의 스레드는 Java.lang.Thread를 통해 구현된다는 것을 알고 있습니다. 그런 다음 Thread 객체를 인스턴스화하여 스레드를 생성한 다음 start()를 호출하여 시작할 수 있습니다. 그러나 Thread의 특정 메소드 run()도 스레드를 시작할 수 있는데, 이 두 메소드의 차이점은 무엇입니까?
스레드 상태
在Java当中,线程通常有五种状态:创建、运行、阻塞、等待、终止 NEW------------------->新建状态,没有调用start()之前的状态 RUNNABLE---------->运行状态,(running执行中,ready就绪(等待cpu时间片)) BLOCKED------------>阻塞状态, WAITING-------------->等待状态,没有明确的等待结束时间,调用wait() TIMED_WAITING—>超时等待状态,有明确的等待时间,如:sleep(xxx) TERMINATED-------->终止状态
멀티 스레딩의 원리:
우리는 일반적으로 스레드를 시작하기 위해 새로운 스레드를 사용하고, 시작하기 위해 start 메소드를 호출합니다. 스레드는 실행 준비 상태에 있고 CPU 스케줄링을 기다립니다. 그런 다음 스레드에서 run() 메서드를 실행합니다. start 메서드를 사용하면 실행 메서드가 완료될 때까지 기다리지 않고 다음 코드를 계속 실행할 수 있기 때문에 진정한 멀티스레딩을 실현할 수 있습니다. 스레딩.
스레드를 직접 사용하여 run 메소드를 실행하면 어떻게 되나요?
run 메소드는 스레드에서의 일반적인 메소드이기 때문에 run() 메소드를 직접 호출하면 이때는 메인 스레드에서 실행됩니다. 왜냐하면 프로그램에 스레드가 하나뿐이라면 메인 스레드이기 때문입니다. 두 개의 스레드입니다. 둘 다 run() 메서드를 직접 호출하면 실행 순서가 순서대로 실행되어야 하며 멀티스레딩의 목적은 달성되지 않습니다.
무료 학습 영상 공유: java 영상 튜토리얼
코드 비교
public class ThreadDemo5 { public static final boolean flag=false; public static void main(String[] args) { Thread t1=new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()); } }); t1.start(); } }
start() 메소드 호출, 스레드 이름은 기본값
public class ThreadDemo5 { public static final boolean flag=false; public static void main(String[] args) { Thread t1=new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()); } }); t1.run(); } }
run() 호출, 스레드 이름은 main
관련 권장 사항: Java 입문 튜토리얼
위 내용은 Java 스레드에서 시작 메소드와 실행 메소드의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!