通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程。
而如果直接用Run方法,这只是调用一个方法而已,程序中依然只有主线程--这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。
记住:线程就是为了更好地利用CPU,提高程序运行速率的!
public class TestThread1{
public static void main(String[] args){
Runner1 r=new Runner1();
//r.run();//这是方法调用,而不是开启一个线程
Thread t=new Thread(r);//调用了Thread(Runnable target)方法。且父类对象变量指向子类对象。
t.start();
for(int i=0;i<100;i++){
System.out.println("进入Main Thread运行状态");
System.out.println(i);
}
}
}
class Runner1 implements Runnable{ //实现了这个接口,jdk就知道这个类是一个线程
public void run(){
for(int i=0;i<100;i++){
System.out.println("进入Runner1运行状态");
System.out.println(i);
}
}
}
注意:
Runnable接口分析
Java中实现多线程有两种途径:继承Thread类或者实现Runnable接口.
Runnable接口非常简单,就定义了一个方法run(),继承Runnable并实现这个
方法就可以实现多线程了,但是这个run()方法不能自己调用,必须由系统来调用,否则就和别的方法没有什么区别了.
先给一个简单的例子:
public class MultiThread implements Runnable{
public static void main(String[] args){
for(int i=0;i<10;i++){
new Thread(new MultiThread()).start();//correct
//new Thread(new MultiThread()).run 1
//new MultiThread().run() 2
}
}
public void run(){
System.out.println(Thread.currentThread().getName());
}
}
运行后应该启动了10个新的线程,加上主线程一共11个线程,应该输出是Thread-1知道10.
这里要注意启动线程的方式是调用了Thread的start()方法,而不是run方法,如果
用注释里的1或者2输入都是10个main,因为这个时候run()方法还原了,和普通方法一样了.
我们也可以得出一个结论:所有的线程在运行时都是一个Thread实例,虽然可以不用继承Thread
实现多线程,但是最终还是Thread的一个实例.
转自 http://hi.baidu.com/xwang0923/blog/item/e4aab7ed1450803cacafd50a.html
分享到:
相关推荐
在Java多线程编程中,`Thread` 类的 `run()` 方法和 `start()` 方法扮演着不同的角色,它们之间的区别是理解并发执行的关键。 首先,`start()` 方法是真正启动新线程的方法。当你调用 `Thread` 对象的 `start()` ...
首先,`Thread`类是Java中的核心类,它代表了程序中的一个执行线程。当你创建一个新的`Thread`对象并启动它时,Java虚拟机(JVM)会为这个线程分配CPU时间片,从而使得代码可以在不同的线程间交替执行。 要实现...
在Java编程语言中,理解和掌握线程的使用是至关重要的,特别是`Thread.start()`和`Thread.run()`这两个方法。它们在多线程编程中扮演着关键角色,但有着明显的区别。 首先,`Thread.start()`方法的主要作用是启动一...
* 在java中真正开启线程的方法是这样的。 */ Thread t = new Thread(r); t.start(); setContentView(R.layout.activity_main); System.out.println("Activity-->"+ Thread.currentThread().getId()...
Java线程中的`run()`和`start()`方法是线程编程中的关键概念,它们之间有着显著的区别。首先,我们来看一下这两个方法的基本解释。 1. `start()`方法:`start()`是真正启动线程的关键,它使得线程进入就绪(可运行...
在理解Thread类的start()和run()方法的区别时,我们需要深入探讨它们的工作原理。 首先,start()方法的主要作用是启动一个新的线程并执行该线程的run()方法。当调用start()时,Java虚拟机(JVM)会执行线程的初始化...
1. **`start`方法**:当我们调用`Thread`对象的`start`方法时,Java虚拟机(JVM)会创建一个新的线程来执行`run`方法中的代码。这意味着`run`方法的内容将在一个新的独立的执行上下文中运行,与调用`start`方法的...
`Thread`类是Java中用于创建和管理线程的核心类,而`start()`和`run()`方法是与线程执行密切相关的方法,它们之间存在显著的区别。 首先,`run()`方法是`Runnable`接口或`Thread`类中的一个成员方法。当你需要创建...
在Java编程语言中,线程是程序执行的独立路径,允许多个任务同时进行。...在实际编程中,我们通常会自定义 `Thread` 类或实现 `Runnable` 接口,然后重写 `run()` 方法,以提供线程需要执行的具体任务。
在Java多线程编程中,理解`Thread`类的`start()`和`run()`方法的区别至关重要。这两个方法在实现线程并发执行时起到不同的作用。 首先,`start()`方法是用于启动一个新的线程。当你调用`start()`方法时,Java虚拟机...
start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。 run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动...
本文主要介绍了JAVA面试题中关于启动线程的start()和run()方法的详解。通过示例代码,详细介绍了这两个方法的作用和区别,以及它们在启动线程时的执行过程。 第一点,start()方法和run()方法的区别。在Java中,...
本文将全面解析Java线程中的`start`和`run`方法,以及自定义线程的两种常见方式。 首先,自定义线程有两种主要方法: 1. 实现`Runnable`接口:创建一个类实现`Runnable`接口,并重写`run`方法。然后,将这个实现了...
与`start()`不同,`run()`可以直接作为一个普通方法调用,但这并不会启动一个新的线程,而是同步地在当前线程中执行`run()`里的代码。 5. **线程调度**:线程何时执行取决于JVM的调度策略,可能是抢占式调度或时间...
当一个类继承`Thread`类时,它必须重写`Thread`类中的`run()`方法,该方法包含了线程执行的主体逻辑。`Thread`类在`java.lang`包中定义,提供了一系列与线程生命周期管理相关的功能,如`start()`, `join()`, `...
继承Thread类的方法直接扩展Thread类并重写run()方法,而实现Runnable接口则需要创建一个实现了Runnable接口的类,并在run()方法中定义线程的行为。这两种方式各有优缺点,继承Thread类允许直接使用this关键字引用...
面试中常见的问题在于理解`start()`方法与`run()`方法的区别。这里我们将详细探讨这两个方法以及它们在Java线程中的作用。 首先,`start()`方法是开启新线程的关键,而`run()`方法则是线程执行的具体任务。当你调用...
1. **继承Thread类:** 创建一个新的类,使其继承自`Thread`类,并重写`run()`方法。 ```java public class MyThread extends Thread { @Override public void run() { // 线程执行的代码 } } ``` 2. **...
Java中启动线程start和run的两种方法 Java 中启动线程有两种方法,即继承 Thread 类和实现 Runnable 接口。由于 Java 无法实现多重继承,所以一般通过实现 Runnable 接口来创建线程。但是,无论哪种方法都可以通过 ...
Java提供了两种主要的方法来创建线程,分别是直接继承自`Thread`类和实现`Runnable`接口。这两种方法各有其特点和适用场景。 1. **继承Thread类**: 当你选择继承`Thread`类时,你需要创建一个新的类,该类直接...