`
wsql
  • 浏览: 11811345 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Java多线程-run方法与start方法的区别

 
阅读更多
package com.interview;
/**
 * java多线程的两种实现方式以及run、start方法的区别
 * @author MEI.LIU
 *
 */
public class ThreadTest {
	public static void main(String[] args) throws InterruptedException {
		ThreadTest tt = new ThreadTest();
		Thread1 t1 = tt.new Thread1();
		Thread2 t2 = tt.new Thread2();
		Thread3 t3 = tt.new Thread3();
		Thread4 t4 = tt.new Thread4();
		//实现Runnable方法的方式必须要用new Thread(tt.new Thread5())来转换为Thread类型,才能调用Thread的start方法)
		Thread t5 = new Thread(tt.new Thread5());
		t1.start();
		Thread.sleep(1000);
		t2.start();
		Thread.sleep(1000);
		t3.start();
		Thread.sleep(1000);
		t4.start();
		Thread.sleep(10000);
		((Thread) t5).start();
	}

	class Thread1 extends Thread {
		public void run() {
			try {
				while (true) {
					for (int i = 1000;; i--) {
						Thread.sleep(1000);
						System.out.println("现在i的值为:" + i);
					}
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	class Thread2 extends Thread {
		public void run() {
			try {
				while (true) {
					System.out.println("哈哈哈哈哈哈哈哈哈");
					Thread.sleep(666);
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	class Thread3 extends Thread {
		public void run() {
			try {
				while (true) {
					for (int j = 1000;; j--) {
						System.out.println("目前,j的值是:" + j);
						Thread.sleep(2000);
					}
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	class Thread4 extends Thread {
		public void run() {
			try {
				while (true) {
					System.out.println("TTTTTTTTTTTTTTTTTTT");
					Thread.sleep(5000);
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	class Thread5 implements Runnable {
		public void run() {
			try {
				while (true) {
					System.out.println("咚咚咚咚咚咚咚咚咚咚咚咚咚");
					Thread.sleep(1400);
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

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

Start:

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

Run:

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

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

控制台输出结果:

分享到:
评论

相关推荐

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

    用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦...

    java多线程之赛马程序实验8多线程练习下载进度

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

    java多线程示例

    Java中的多线程有三种实现方式: 1.继承Thread类,重写run方法。Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯一方法就是通过Thread类的start方法。 2.实现Runnable接口,并...

    java多线程机制 -- 源码详解

    java多线程机制: 例子 1 public class Example1 { static Lefthand left;static Righthand right; public static void main(String args[]) { left=new Lefthand(); //创建两个线程。 right=new Righthand();...

    java多线程设计模式详解(PDF及源码)

    单线程程序 多线程程序 Thread类的run方法和start方法 线程的启动 线程的启动(1)——利用Thread类的子类 线程的启动(2)——利用Runnable接口 线程的暂时停止 线程的共享互斥 synchronized方法 synchronized阻挡 ...

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

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

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

    1) start:用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有...

    基础深化和提高-Java多线程技术

    Java多线程技术允许程序同时执行多个线程,每个线程执行一个独立的任务。这种并发性能够提高程序的性能和资源利用率,使得程序能够同时处理多个任务,从而提高响应速度和吞吐量。 在Java中,实现多线程有几种方式:...

    java多线程之赛马程序

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

    php多进程框架-模拟java多线程接口simple-fork-php.zip

    SimpleFork提供一套类似于JAVA多线程的进程控制接口,提供回收、同步、互斥、通信等方案,开发者可以关注业务问题,不需要过多考虑进程控制。 引入 composer require jenner/simple_fork require path/to/...

    Thread实现多线程

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

    如何使用Java编写多线程程序

    线程的观念在java是语言中是重要的,根深蒂固的,因为在java语言中的线程系统是java语言自建的, java中有专门的支持多线程的API库,所以你可以以最快的速度写一个支持线程的程序。在使用java创建线程的时候,你可以...

    多线程 打印1-99,100-199

    b) ThreadMock类与个公有的方法start,用来启动模拟线程;模拟线程的执行函数体由接口的run方法定义,并由start方法调用。 c) 可以通过以下两种方式创建模拟线程的实例并启动模拟线程 2 . 写一个多线程程序,实现...

    Java多线程编程要点

    Java多线程编程要点:1、认识Thread和Runnable;2、认识Thread的start和run;3、线程状态说明.

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

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

    java 一手画方一手画圆 多线程

    import java.applet.*; import java.awt.*; import java.awt.event.*; public class fangyuan extends Applet implements Runnable { Thread left,right; Graphics mypen; int x,y,z,a,b,i; public void init() { ...

    Java面试宝典-经典

    50、多线程有几种实现方法?同步有几种实现方法? 33 51、启动一个线程是用run()还是start()? . 33 52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 33 53、线程的基本概念...

    java 实现多线程服务器

    * <p>Description: 本实例使用多线程实现多服务功能。 * <p>Copyright: Copyright (c) 2003 * <p>Filename: * @author 杜江 * @version 1.0 */ class moreServer { public static void main (String [] args...

    java多线程Thread的实现方法代码详解

    主要介绍了java多线程Thread的实现方法代码详解,涉及start(),run(),stop(),interrupt(),isInterrupted(),join()和join(long millis)等方法的介绍,具有一定借鉴价值,需要的朋友可以了解下。

Global site tag (gtag.js) - Google Analytics