The differences are as follows:
We know that threads in Java are implemented through Java.lang.Thread, then we can instantiate Thread An object is used to create a thread, and then call start() to start it. However, a specific method run() of Thread can also start the thread. So what is the difference between these two methods?
Thread status
在Java当中,线程通常有五种状态:创建、运行、阻塞、等待、终止 NEW------------------->新建状态,没有调用start()之前的状态 RUNNABLE---------->运行状态,(running执行中,ready就绪(等待cpu时间片)) BLOCKED------------>阻塞状态, WAITING-------------->等待状态,没有明确的等待结束时间,调用wait() TIMED_WAITING—>超时等待状态,有明确的等待时间,如:sleep(xxx) TERMINATED-------->终止状态
Multi-threading principle:
We generally use thread new to start a thread, and then call the start method to start, the thread will be in the running state ready, waiting for the CPU Scheduling, and then executing the run() method in the thread, using the start method truly realizes multi-threaded operation, because at this time we can continue to execute the following code without waiting for our run method to complete. This is called multi-threading.
What happens if you directly use thread to execute the run method?
Because the run method is an ordinary method in thread, if the run() method is called directly, it will run in the main thread at this time, because there is only one main thread in the program. If there are two Threads all call the run() method directly, so their execution order must be executed in sequence, and the purpose of multi-threading is not achieved.
Free learning video sharing: java video tutorial
Code comparison
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(); } }
Call the start() method, the thread name is the default
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(); } }
Call run(), the thread name is main
##Related recommendations:The above is the detailed content of What is the difference between start method and run method in java thread. For more information, please follow other related articles on the PHP Chinese website!