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知识点详解 #### Lambda表达式与函数式编程 Lambda表达式是Java 8引入的一个重要特性,它支持将函数作为参数传递到方法中,极大地简化了代码编写。Lambda表达式的使用使得Java语言更加简洁、易...
1. **了解Java的数据类型:** 包括基本数据类型如整型(int)、浮点型(float/double)、字符型(char)、布尔型(boolean),以及引用数据类型如数组、类、接口等。 2. **掌握各种变量的声明方式:** 包括局部变量、实例...
- 实现Runnable接口是创建多线程的一种方式。主要步骤包括: - 定义实现Runnable接口的类。 - 在类中实现`run()`方法。 - 创建Runnable接口的实例,并通过`Thread`类来创建线程对象。 - 调用线程对象的`start()...
Java线程堆栈是一种强大的诊断工具,能够帮助开发者快速定位多线程应用程序中的问题。通过分析线程堆栈,可以找到系统中各种问题的根源,如系统无缘无故CPU过高、系统挂起、系统运行越来越慢、性能瓶颈、线程死锁、...
### JStack和Java Thread Dumps分析 #### 一、引言 在Java应用程序开发与维护过程中,时常会遇到性能瓶颈或死锁等问题。这些问题往往难以定位,尤其当系统处于高负载下时,更是如此。此时,`JStack`工具便显得尤为...
- 使用 Runnable 接口实现多线程是一种常见的做法。 - 实现 Runnable 接口的类需要实现 `run()` 方法。 - 创建线程后,通过调用 `Thread` 对象的 `start()` 方法启动线程。 ### 8. 文件读写 - **知识点说明**:...
1. 多线程实现方式:Java 中有两种实现多线程的方式,一种是继承 Thread 类,另一种是实现 Runnable 接口。 2. Thread 的生命周期:线程的生命周期包括创建、启动、运行、休眠、死亡等阶段。 四、文件输入/输出 1....
- **详细解释**:在 Java 中,实现多线程有两种基本方法:继承 `Thread` 类或者实现 `Runnable` 接口。这两种方法都可以创建线程并运行具体的任务。因此,正确答案是 (Thread、Runnable)。 #### 题目12:Java 整型...
- **解析**:在Java中,创建线程的常见方式之一是通过实现`Runnable`接口并重写`run()`方法,然后将这个对象传递给`Thread`类的构造函数来创建一个新的线程。因此,选项B“实现接口并重写 run()方法”是正确的。 ##...
- 实现多线程的基本步骤包括声明一个实现了 `Runnable` 接口的类,并在该类中实现 `run()` 方法。然后创建该类的实例,并将其传递给 `Thread` 类的构造函数来创建一个新的线程对象。最后,通过调用 `start()` 方法...
- Java中的线程可以通过实现`Runnable`接口或继承`Thread`类创建,例如`Thread tt = new Thread(t);`。 - 多线程程序中常见的`start()`, `run()`, `stop()`, `init()`, `destroy()`方法用于线程的生命周期管理。 ...
在.NET Framework中,多线程编程是开发高效并发应用程序的关键技术。它允许程序同时执行多个任务,从而充分利用多核处理器的计算能力。本篇将深入探讨.NET Framework中的多线程编程,包括创建线程、线程同步、线程...
1. 实现多线程可以通过继承Thread类并定义run方法,或者实现Runnable接口并定义run方法。 2. 在多线程编程中,需要注意线程的创建、启动和同步问题。 四、文件输入输出 1. 缓冲式输入数据文件可以提高输入速度和...
若要实现多线程,一般推荐使用Runnable接口,因为这允许多重继承。正确的步骤是声明实现Runnable接口,实现run()方法,然后创建Thread对象并调用start()方法。 6. 文件I/O:缓冲式输入可以提高数据文件的读取速度。...
Java线程Dump分析工具jstack是Java开发人员和运维人员常用的诊断工具,它能够帮助我们了解Java应用程序中线程的状态,以及线程的执行轨迹。本文将深入解析jstack的使用方法及其在不同场景下的应用。 jstack命令的...
8. **多线程与Runnable接口**:实现Runnable接口并重写`run()`方法是创建线程的一种方式,然后需要在Thread对象中传递Runnable实例并调用`start()`方法启动线程。 9. **文件输入输出流**:对于按行处理字符流,...
Java全国自考历年考试的参考答案涵盖了多个Java编程的基础知识点,包括整型常量的表示、循环控制、类与对象的交互、字符串比较、GUI组件、多线程、文件操作以及数据库连接。以下是对这些知识点的详细解释: 1. **...
Java main 方法是多线程还是单线程** - `main` 方法默认是在单线程中执行的,但可以通过创建新线程来实现多线程。 **3. 线程的生命周期** - 新建状态(New):线程被创建但尚未启动。 - 就绪状态(Runnable):...
- **多线程创建**:可以通过继承`Thread`类或实现`Runnable`接口来创建线程。 - **常用方法**:`start()`启动线程,`run()`定义线程体,`join()`等待线程结束。 - **线程状态**:线程在其生命周期中会经历不同的状态...