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();
- }
- }
- }
- }
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多线程-run方法与start方法的区别的更多相关文章
- Java 多线程实现接口Runnable和继承Thread区别(转)
Java 多线程实现接口Runnable和继承Thread区别 Java中有两种实现多线程的方式.一是直接继承Thread类,二是实现Runnable接口.那么这两种实现多线程的方式在应用上有什么区别 ...
- Java 多线程启动为什么调用 start() 方法而不是 run() 方法?
多线程在工作中多多少少会用到,我们知道启动多线程调用的是 start() 方法,而不是 run() 方法,你知道原因吗? 在探讨这个问题之前,我们先来了解一些多线程的基础知识~ 线程的状态 Java ...
- java多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与notify 先看一下java线程运行时各个阶段的运行状态 j ...
- java多线程有几种实现方法,都是什么?
转自:http://www.cnblogs.com/liujichang/p/3150387.html 多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方法有两种, ...
- JAVA多线程实现的三种方法
JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没 ...
- Java多线程【三种实现方法】
java多线程 并发与并行 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行 并行:一组程 ...
- java 多线程阻塞队列 与 阻塞方法与和非阻塞方法
Queue是什么 队列,是一种数据结构.除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的.无论使用哪种排序方式,队列的头都是调用remove()或poll()移 ...
- Java 多线程同步的五种方法
一.引言 闲话不多说,进入正题. 二.为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常.举个例子 ...
- java多线程有几种实现方法?线程之间如何同步
java中多线程的实现方法有两种:1.直接继承thread类:2.实现runnable接口: 同步的实现方法有五种:1.同步方法:2.同步代码块:3.使用特殊域变量(volatile)实现线程同步:4 ...
随机推荐
- Linux命令之pstree - 以树状图显示进程间的关系
pstree命令以树状图显示进程间的关系(display a tree of processes).ps命令可以显示当前正在运行的那些进程的信息,但是对于它们之间的关系却显示得不够清晰.在Linux系 ...
- 【BZOJ】1718: [Usaco2006 Jan] Redundant Paths 分离的路径
[题意]给定无向连通图,要求添加最少的边使全图变成边双连通分量. [算法]Tarjan缩点 [题解]首先边双缩点,得到一棵树(无向无环图). 入度为1的点就是叶子,两个LCA为根的叶子间合并最高效,直 ...
- JS之document例题讲解2
例题三.图片轮播 <body> <div style="width:1000px; height:250px; margin-top:30px"> < ...
- 20151024_001_C#基础知识(静态与非静态的区别,值类型和引用类型,堆和栈的区别,字符串的不可变性,命名空间)
1:我们把这些具有相同属性和相同方法的对象进行进一步的封装,抽象出来类这个概念. 类就是个模子,确定了对象应该具有的属性和方法. 对象是根据类创建出来的. 2:类:语法 [public] class ...
- 【Python学习笔记】Coursera课程《Using Databases with Python》 密歇根大学 Charles Severance——Week4 Many-to-Many Relationships in SQL课堂笔记
Coursera课程<Using Databases with Python> 密歇根大学 Week4 Many-to-Many Relationships in SQL 15.8 Man ...
- [Leetcode Week12]Unique Paths
Unique Paths 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/unique-paths/description/ Description A ...
- python基础===中文手册,可查询各个模块
http://python.usyiyi.cn/translate/python_352/index.html
- Centos7 配置网络
/* Centos7 的网络 不可以用ifconfig获取,需要安装包 所以 .*/ //查看ip [root@master ~]# ip a /* Centos7 的网卡名字与 Centos6有区别 ...
- javascript方法--call()
关于call方法,以前经常看到这个方法,但是也没怎么用心去学习,后来觉得不行,所以知识在一点一点补~ 今天对自己学习call方法做一下总结 其实,学了call方法,会发现call跟apply其实是很像 ...
- java - 线程1打印1-10,当线程打印到5后,线程2打印“hello”,然后线程1继续打印
public class T { private static int a =1;//1代表线程1 2线程2 public static void main(String[] args) { fina ...