Thread.java start方法和run方法的区别

原创 2015年11月18日 16:28:49

Thread.java start方法和run方法的区别

我们知道java中,使用start或者run都可以开启一个线程,那这两者有什么区别呢?

Thread.java类中的start()方法会通知 "线程规划器" 此线程已经准备好了,等待调用线程对象的run()方法。系统会安排一个合适时间来调用Thread中的run()方法,开启线程。
而使用thread.run()并不会交给"线程规划器"进行处理,而是由主线程来调用run()方法。两者最重要的区别是前者是异步的,而后者是同步的,即必须等到run()方法中的代码都执行完毕后才可以再继续执行后面的代码。

例一:使用thread.run()

public class ThreadTest extends Thread {
	
	@Override
	public void run() {
		for(int i =0;i<5;i++)
			try {
				sleep(1000);
				System.out.println("wangcan");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
	}
}
public class MainTest {
	public static void main(String[] args){
		ThreadTest threadTest = new ThreadTest();
		threadTest.run();
		System.out.println("32424");
	}
}

可以看到输出结果是:
wangcan
wangcan
wangcan
wangcan
wangcan
32424

System.out.println("32424")必须等待threadTest对象的run()方法中的内容执行完后才会执行。

例二:使用thread.start()方法

public class ThreadTest extends Thread {
	
	@Override
	public void run() {
		for(int i =0;i<5;i++)
			try {
				sleep(1000);
				System.out.println("wangcan");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
	}
}
public class MainTest {
	public static void main(String[] args){
		ThreadTest threadTest = new ThreadTest();
		threadTest.start();
		System.out.println("32424");
	}
}

可以看到,输出结果是:

32424
wangcan
wangcan
wangcan
wangcan
wangcan

两个线程(主线程和子线程)是异步的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

java再复习——多线程之初识线程,并从源码角度分析start与run方法,Thread类与Runnable接口

进程与线程的概念。 进程:是操作系统为一个程序分配内存空间的基本单位。 线程:存在于一个进程里,是程序执行的基本单元。线程才是负责是去执行程序的。 java创建线程的方式: 一:继承T...

Java中启动线程start和run方法的区别

Java中启动线程有两种方式,继承Thread类以及实现接口Runnable,由于Java无法实现多重继承,故经常通过实现接口Runnable来创建线程。但是无论哪种方式创建都可以通过start()和...

java 线程中start方法与run方法的区别详细介绍

这篇文章主要介绍了java 线程中start方法与run方法的区别详细介绍的相关资料,在java线程中调用start方法与run方法的区别在哪里? 这两个问题是两个非常流行的初学者级别的多线程面试问题...

java实现多线程的方式以及run方法和start方法的区别

1.java实现多线程的两种方式   1)java类继承Thread类   继承Thread类是实现java多线程的一种方式,但是实际上Thread类本身实现了Runnable接口,它代表了线程的一个...

线程中start方法与run方法的区别-java教程

线程中start方法与run方法的区别-java教程 在线程中,如果start方法依次调用run方法,为什么我们会选择去调用start方法?或者在java线程中调用start方法与run方法...

黑马程序员 Java学习总结之多线程中start方法和run方法的区别(这个一定要搞清楚)

------- android培训、java培训、期待与您交流! ---------- 问到的一个比较多的问题就是,在Java多线程中要启动线程为什么不是调用run方法,而是调用一个不知道从哪里冒出...

了解Java线程的start方法如何回调run方法

面试中可能会被问到为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法? Java 创建线程的方法 实际上,创建线程最重要的是提供线程函数(回调函数...

Java中启动线程start和run方法

一、区别Java中启动线程有两种方法,继承Thread类和实现Runnable接口,由于Java无法实现多重继承,所以一般通过实现Runnable接口来创建线程。但是无论哪种方法都可以通过start(...
  • lai_li
  • lai_li
  • 2016年11月07日 20:17
  • 4935

java线程的start和run方法解析

自定义线程两种方法 自定义一个runnable接口的实现类,然后构造一个thread,即对thread传入一个runnable接口类。 new一个thread或者写个thread子类,覆盖它的run方...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Thread.java start方法和run方法的区别
举报原因:
原因补充:

(最多只允许输入30个字)