`
cloudeagle_bupt
  • 浏览: 537712 次
文章分类
社区版块
存档分类
最新评论

Thread的run方法和start方法

 
阅读更多

public class ThreadTest {

	static Integer slots = 0;
	static Integer tasks = 0;
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Test t = new Test();
//		t.start();
		t.run() ;
		System.out.println(" main ");
	}

}


class Test extends Thread 
{
	 public void run()  //启动一个workload
	 {
		     try {
				sleep(10000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		     System.out.println("test1");
	 }
}



使用Thread的run方法和start()方法,得到不同的结果, 不知道为啥

1. 主线程中使用run方法时, 始终结果是

test1
main


2. 当改成start()方法时:

main

test1


区别:调用start方法实现多线程,而调用run方法没有实现多线程

Start:

用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到spu时间片,就开始执行run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。

Run:

run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。

总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。

分享到:
评论

相关推荐

    Java多线程——Thread类中run()方法和start()方法的区别.docx

    通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到spu时间片,就开始执行run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行...

    Android:Handler的post()方法和Thread的start()方法执行Thread的run()方法的区别

    * 此时只会会执行Run()方法,但是不会开启新的线程 */ //Handler h = new Handler(); //h.post(r); /* * 在java中真正开启线程的方法是这样的。 */ Thread t = new Thread(r); t.start(); ...

    Java Thread 的 run() 与 start() 的区别.docx

    通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行...

    Thread中start()和run()的区别_动力节点Java学院整理

    start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。...run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!

    java中thread线程start和run的区别

    主要介绍了java中thread线程start和run的区别,run()是Runnable接口中定义的一个方法,是为了让客户程序员在这个方法里写自己的功能代码的。直接调用和普通的类调用自己的成员方法是没有任何区别的

    java thread start()和run()方法简析

    本文以java中thread的start()和run()的区别做详细介绍, 需要了解跟多的朋友可以参考下

    Java Thread中start()和run()的区别_动力节点Java学院整理

    start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。而run() : run()就和普通的...下面通过示例代码给大家介绍了Java Thread中start()和run()的区别,感兴趣的朋友一起看看吧

    java基本教程之Thread中start()和run()的区别 java多线程教程

    主要介绍了Thread中start()和run()的区别,Thread类包含start()和run()方法,它们的区别是什么?下面将对此作出解答

    Java中Thread.start()和Thread.run()的区别.docx

    Java是一种功能强大、可靠性高、跨平台的编程语言,适用于各种应用场景。它被广泛用于企业级应用开发、移动应用开发、云计算、大数据处理等领域,是一门值得学习和掌握的编程语言。

    认识Thread和Runnable

    认识Thread和Runnable 认识Thread的start和run 线程状态说明

    Thread实现多线程

    继承Thread类: 1必须重写run 方法:里面放置的实际的线程体 2 启动线程: 3创建Thread对象 4调用Thread对象的start 方法启动线程

    Python run()函数和start()函数的比较和差别介绍

    1 使用run()方法启动线程,它打印的线程名是MainThread,也就是主线程。 import threading,time def worker(): count = 1 while True: if count >= 4: break time.sleep(1) count += 1 print(“thread name = {}”....

    Android 线程thread的两种实现方法(必看)

    三: Handler 机制,它是Runnable和Activity交互的桥梁,在run方法中发送Message,在Handler里,通过不同的Message执行不同的任务。 下面分别给出两种线程的实现方法,其一,扩展java.lang.Thread类,也就是把run()...

    java多线程示例

    Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯一方法就是通过Thread类的start方法。 2.实现Runnable接口,并实现该接口的run()方法.创建一个Thread对象,用实现的Runnable接口...

    创建线程的三种方式(Thread、Runnable、Callable).docx

    3. 每个线程都是通过某个特定的Thread对象所对应的方法run( )来完成其操作的,方法run( )称为线程体。 4. 通过调用Thread类的start()方法来启动一个线程(只是将线程由新生态转为就绪态,而不是运行态)。

    JAVA并发编程实践-线程池-学习笔记

    线程复用原理如下:每一个 Thread 的类都有一个 start 方法。 当调用 start 启动线程时 Java 虚拟机会调 用该类的 run方法。 那么该类的 run() 方法中就是调用了 Runnable 对象的 run() 方法。 我 们可以继承重写...

    Qt5中两种线程操作的方法 demo代码

    QThread::run()是线程的入口 相当于 main函数一样 创建的线程通过调用start()来执行run(); run() 是一个虚函数 通过子类实现方法 通过moveToThread()函数来实现 作用:将某一个对象从当前的线程中推到另一个线程中,...

    【java面试题】综合性经典Java面试题

    Thread类的start()和run()方法的区别 start()方法会创建新的线程并启动该线程,所以该方法会调用其他native方法,而run()方法就是: 正常的Java方法调用,即在原来的线程中执行java代码。 Java中Runnable和...

    对python:threading.Thread类的使用方法详解

    2、在子类中重写run() 方法 这里举个小例子: import threading, time class MyThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): global n,

    java多线程之赛马程序

    运用多线程技术,练习Thread类得run方法和start方法。运用进度条显式表示下载进度。

Global site tag (gtag.js) - Google Analytics