`

[#0x004A] Java多线程:Runnable接口 v.s. Thread类

    博客分类:
  • Java
阅读更多
public class Runner implements Runnable {
	@Override
	public void run() {
		for(int i = 0; i < 100; i++) {
			System.out.println("Runner runs to --> " + i);
		}
	}
}

 

public class MultiThreadTest {

	public static void main(String[] args) {
		Runner r = new Runner();
		//r.run(); // 方法调用,没有启动新线程

		Thread t = new Thread(r);
		//t.run(); // 方法调用,没有启动新线程
		t.start(); // 启动新线程
		
		for(int i = 0; i < 200; i++) {
			System.out.println("Main goes " + i); 
		}
		
	}

}

 

Runnable接口和Thread类的关系:

 

1. 首先有Thread implememts Runnable

 

2.  虽说Runnable有一个方法run(),但基本上Runnable可以看做是一个标记接口;Runnable本身并不提供多线程机制,只有Thread类才能启动新线程;Runnable的实现类只有传递给Thread构造器才有意义

 

3.  Thread.run()默认会调用传递给Thread构造器的Runnable实现类的run(),如果没有Runnable实现类传进来的话,Thraed.run()方法什么都不做直接返回(可见Thread.run()是个空方法);但直接调用Thread.run()方法并不能启动新线程(直接调用Thread.run()方法相当于一般的方法调用,Runnable实现类的run()方法亦是如此),只有Thread.start()方法才能启动新线程;Thread.start()方法会调用Thread.run()方法

 

4.  定制自己的线程类的方法:

  -> class Runner implements Runnable,实现run()方法,然后Thread t = new Thread(new Ruuner()); t.start();

  -> class MyThread extends Thread覆写run()方法,然后MyThread mt = new MyThread(); mt.start();

  这两种方式又涉及到“接口还是继承”的设计原则问题了

     

分享到:
评论

相关推荐

    Java多线程和JUC.pdf

    ### Java多线程和JUC知识点详解 #### Lambda表达式与函数式编程 Lambda表达式是Java 8引入的一个重要特性,它支持将函数作为参数传递到方法中,极大地简化了代码编写。Lambda表达式的使用使得Java语言更加简洁、易...

    Java全国自考历年考试(参考答案)2.doc

    - 实现Runnable接口是创建多线程的一种方式。主要步骤包括: - 定义实现Runnable接口的类。 - 在类中实现`run()`方法。 - 创建Runnable接口的实例,并通过`Thread`类来创建线程对象。 - 调用线程对象的`start()...

    详解Java线程堆栈

    Java线程堆栈是一种强大的诊断工具,能够帮助开发者快速定位多线程应用程序中的问题。通过分析线程堆栈,可以找到系统中各种问题的根源,如系统无缘无故CPU过高、系统挂起、系统运行越来越慢、性能瓶颈、线程死锁、...

    JStack和Java Thread Dumps分析

    ### JStack和Java Thread Dumps分析 #### 一、引言 在Java应用程序开发与维护过程中,时常会遇到性能瓶颈或死锁等问题。这些问题往往难以定位,尤其当系统处于高负载下时,更是如此。此时,`JStack`工具便显得尤为...

    Java 语言程序设计 (一 )试题.docx

    - 使用 Runnable 接口实现多线程是一种常见的做法。 - 实现 Runnable 接口的类需要实现 `run()` 方法。 - 创建线程后,通过调用 `Thread` 对象的 `start()` 方法启动线程。 ### 8. 文件读写 - **知识点说明**:...

    10月自考Java语言程序设计一4748试题及答案解析.doc

    1. 多线程实现方式:Java 中有两种实现多线程的方式,一种是继承 Thread 类,另一种是实现 Runnable 接口。 2. Thread 的生命周期:线程的生命周期包括创建、启动、运行、休眠、死亡等阶段。 四、文件输入/输出 1....

    2021-2022计算机二级等级考试试题及答案No.12847.docx

    - **详细解释**:在 Java 中,实现多线程有两种基本方法:继承 `Thread` 类或者实现 `Runnable` 接口。这两种方法都可以创建线程并运行具体的任务。因此,正确答案是 (Thread、Runnable)。 #### 题目12:Java 整型...

    2019年Java程序设计教程测试题及答案-测试题一.docx

    - **解析**:在Java中,创建线程的常见方式之一是通过实现`Runnable`接口并重写`run()`方法,然后将这个对象传递给`Thread`类的构造函数来创建一个新的线程。因此,选项B“实现接口并重写 run()方法”是正确的。 ##...

    Java全国自考历年试卷(参考答案).doc

    - 实现多线程的基本步骤包括声明一个实现了 `Runnable` 接口的类,并在该类中实现 `run()` 方法。然后创建该类的实例,并将其传递给 `Thread` 类的构造函数来创建一个新的线程对象。最后,通过调用 `start()` 方法...

    计算机等级考试JAVA试题.pdf

    - Java中的线程可以通过实现`Runnable`接口或继承`Thread`类创建,例如`Thread tt = new Thread(t);`。 - 多线程程序中常见的`start()`, `run()`, `stop()`, `init()`, `destroy()`方法用于线程的生命周期管理。 ...

    dotNetFramework多线程编程

    在.NET Framework中,多线程编程是开发高效并发应用程序的关键技术。它允许程序同时执行多个任务,从而充分利用多核处理器的计算能力。本篇将深入探讨.NET Framework中的多线程编程,包括创建线程、线程同步、线程...

    2015年10月自考Java语言程序设计(一)(04747)试题及答案解析.doc

    1. 实现多线程可以通过继承Thread类并定义run方法,或者实现Runnable接口并定义run方法。 2. 在多线程编程中,需要注意线程的创建、启动和同步问题。 四、文件输入输出 1. 缓冲式输入数据文件可以提高输入速度和...

    2015年10月自考Java语言程序设计(一)(04747)试题及答案解析[1].pdf

    若要实现多线程,一般推荐使用Runnable接口,因为这允许多重继承。正确的步骤是声明实现Runnable接口,实现run()方法,然后创建Thread对象并调用start()方法。 6. 文件I/O:缓冲式输入可以提高数据文件的读取速度。...

    Java线程Dump分析工具jstack解析及使用场景

    Java线程Dump分析工具jstack是Java开发人员和运维人员常用的诊断工具,它能够帮助我们了解Java应用程序中线程的状态,以及线程的执行轨迹。本文将深入解析jstack的使用方法及其在不同场景下的应用。 jstack命令的...

    《Java语言程序设计(一)》(课程代码04747).doc

    8. **多线程与Runnable接口**:实现Runnable接口并重写`run()`方法是创建线程的一种方式,然后需要在Thread对象中传递Runnable实例并调用`start()`方法启动线程。 9. **文件输入输出流**:对于按行处理字符流,...

    【精美排版】Java全国自考历年考试(参考答案).doc

    Java全国自考历年考试的参考答案涵盖了多个Java编程的基础知识点,包括整型常量的表示、循环控制、类与对象的交互、字符串比较、GUI组件、多线程、文件操作以及数据库连接。以下是对这些知识点的详细解释: 1. **...

    JavaSE面试题

    Java main 方法是多线程还是单线程** - `main` 方法默认是在单线程中执行的,但可以通过创建新线程来实现多线程。 **3. 线程的生命周期** - 新建状态(New):线程被创建但尚未启动。 - 就绪状态(Runnable):...

    Java基础整理

    - **多线程创建**:可以通过继承`Thread`类或实现`Runnable`接口来创建线程。 - **常用方法**:`start()`启动线程,`run()`定义线程体,`join()`等待线程结束。 - **线程状态**:线程在其生命周期中会经历不同的状态...

Global site tag (gtag.js) - Google Analytics