当前位置:首页 > 后端开发 > Java学习从菜鸟变大鸟之三 多线程中Thread 和Runnable的区别与运用

Java学习从菜鸟变大鸟之三 多线程中Thread 和Runnable的区别与运用

6个月前 (05-23)23

   多线程机制是java中的一个特点,掌握它对后面的知识的理解至关重要,是java工程师的必备知识,多线程指在单个程序中可以运行多个不同的线程执行的不同的任务,线程是一个程序内部的顺序控制流。进程是静态的概念,线程是动态的概念。

   每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销,线程可以看成时轻量级的进程,同一类线程贡献代码和数据空间,每个线程具有独立的运行栈和程序计数器,线程切换的开销小。


单线程

   同时有且仅有一个程序在执行


单线程实例1:


public class {
	public static void main(String[] args) {
		m1();
	}
	
	public static  void m1() {
		m2();
		m3();
	}
	
	public static void m2() {}
	public static void m3() {}
}


程序执行图:


Java学习从菜鸟变大鸟之三  多线程中Thread 和Runnable的区别与运用 _ Java侠



只有一条路径来执行,执行m1执行m2,等m2执行完再来执行m3最后回到了执行m1上。



多线程

    是在操作系统中同时运行多个程序,在同一个应用程序中有多个顺序流同时执行,两种方法来实现多线程:

第一种是实现Runnable接口,然后实现其run方法


下面是通过实现Runnable接口实现多线程:

public class TestThread1 {
	public static void main(String args[]) {
		Runner1 r = new Runner1();
		r.start();
		//r.run();
		//Thread t = new Thread(r);
		//t.start();
		
		for(int i=0; i<100; i++) {
			System.out.println("Main Thread:------" + i);
		}
	}
}

//class Runner1 implements Runnable {
class Runner1 extends Thread {
	public void run() {
		for(int i=0; i<100; i++) {	
			System.out.println("Runner1 :" + i);
		}
	}
}


 

 

产生的结果执行图:


Java学习从菜鸟变大鸟之三  多线程中Thread 和Runnable的区别与运用 _ Java侠


第二种方式是new出Thread,然后重写start方法;


public class TestThread2 {
	public static void main(String args[]) {
		Runner2 r = new Runner2();
		Thread t1 = new Thread(r);
		Thread t2 = new Thread(r);
		t1.start();
		t2.start();
	}
}

class Runner2 implements Runnable {
	public void run() {
		for(int i=0; i<30; i++) {	
			System.out.println("No. " + i);
		}
	}
}

结果图:

Java学习从菜鸟变大鸟之三  多线程中Thread 和Runnable的区别与运用 _ Java侠




总结:两种生成线程对象的区别:

1.两种方法均需执行线程的start方法为线程分配必须的系统资源、调度线程运行并执行线程的run方法。

 

2.在具体应用中,采用哪种方法来构造线程体要视情况而定。通常,当一个线程已继承了另一个类时,就应该用第二种方法来构造,即实现Runnable接口。


3.java 是单根继承 实现多线程有两种实种方式一种是继承 thread 类 另一种就是实现Runnable接口 如果这个类还要继承其他的类的时候 这时候是不允许继承的。 此时就可以使用实现接口的方式,况且 Runnable接口中只有一个空的run()方法。


4:Thread实现了Runnable,需要使用Runnable的地方可以直接使用thread;单独使用Runnable时要先把run方法实现了


不能说使用那个更好,要看在什么地方使用最合适,要以实际情况而定!


来源链接:https://www.cnblogs.com/hehe001/p/6334851.html

“Java学习从菜鸟变大鸟之三 多线程中Thread 和Runnable的区别与运用” 的相关文章

JAVA各版本的特性总结 (持续更新)

java12 (2019-03-19) 1. 低暂停时间的GC; 2. 微基准测试套件; 3. Switch表达式; 4. JVM常量API;...

Java中的多线程(学习笔记)

软件专业的大学生,立志成为程序媛,这学期才刚接触java,实在是够菜,希望高手们能指点一二,不胜感激。 今天学到了Java的多线程,下面是我做的笔记,仅供参考和复习。...

Java虚拟机性能管理神器

Java虚拟机性能管理神器

Java虚拟机性能管理神器 - VisualVM(4) - JDK版本与VisualVM版本对应关系【转】 标签: javajvm监...

Java——线程基础

目录 多线程 并发与并行 进程 线程 进程...

java多线程的几种实现方式

java多线程的几种实现方式

1.继承Thread类,重写run方法 Thread类本质上是实现了Runnable接口的一个实例。因此,启动线程的唯一方式就是通过...

java多线程分发问题——多线程求和

最近读了<java编程思想>的分发部分,又碰到一个网友想利用多线程求和并且汇总求最后结果,具体要求是这样的“写十个线程,第一个线程求1到10的和,第二个11到2...

Java GUI记账本(基于Mysql&&文件存储两种版本)

Java GUI记账本(基于Mysql&&文件存储两种版本)

*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.java * 作者:常轩 *...

Java集合,集合的方法,集合的遍历

Java集合,集合的方法,集合的遍历

package com.atgui.java; import org.junit.Test; import java.u...

Java集合面试总结

★★★★★集合框架:用于存储数据的容器。 特点: 1:对象封装数据,对象多了也需要存储。集合用于存储对象。 2:对象的个数确定可以使用数组,但是...

java--poi读取excel图片和内容(支持03版本)

有的时候需要将excel中所包含的图片在导入的时候取出来存到服务器中, 详细实现代码如下: package com.liuf.util; import java....