start()用来启动线程,真正实现了多线程,这时无需等待run()方法体代码执行完毕而直接继续执行下面的代码:通过调用Thread类的start()方法此线程处于就需状态并没有运行,然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,她包含了要执行这个线程的内容,run方法运行结束,此线程终止。而cpu再运行其他线程。
run()当做普通的方法调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才执行下面的代码,而如果直接用run方法,这只是调用一个方法而已,程序中依然只有主程序这一个线程,其程序执行路径还是一条,这样就没有达到写线程的目的。
举例说明:
public class TestThread(){
public static void main(String []args){
Runner1 r = new Runner1();
//r.run();//这是方法调用,而不是开启一个线程
Thread t = new Thread());//调用了Thread(Runnable target)方法。且父类对象变量指向子类对象。
t.start();
for(int i=0;i<100;i++){
System.out.println("进入了mianThread的运行方法");
System.out.println(i);
}
}
}
class Runner1 implements Runnable{//实现了这个接口,jdk就知道这个类是一个线程
public void run(){
for(int j=0;j<100;j++){
System.out.println("进入Runner1运行状态");
System.out.println(j);
}
}
}
分享到:
相关推荐
线程中start方法和run方法的区别
`Thread`类是Java中用于创建和管理线程的核心类,而`start()`和`run()`方法是与线程执行密切相关的方法,它们之间存在显著的区别。 首先,`run()`方法是`Runnable`接口或`Thread`类中的一个成员方法。当你需要创建...
在Java编程中,线程是一个基础概念,start和run是两个常用的方法,但是它们之间的区别却经常被忽视。本文将详细介绍Java线程中start和run的区别,通过示例代码帮助大家更好地理解这两个方法的作用和区别。 start...
### QT线程start()与run()详解 #### 一、QT线程概述 在QT框架中,线程处理是一项非常重要的功能。QT提供了一个跨平台的解决方案——`QThread`类,使得开发者能够轻松地创建多线程应用程序,而无需担心底层操作系统...
在Java多线程编程中,`Thread` 类的 `run()` 方法和 `start()` 方法扮演着不同的角色,它们之间的区别是理解并发执行的关键。 首先,`start()` 方法是真正启动新线程的方法。当你调用 `Thread` 对象的 `start()` ...
本文将全面解析Java线程中的`start`和`run`方法,以及自定义线程的两种常见方式。 首先,自定义线程有两种主要方法: 1. 实现`Runnable`接口:创建一个类实现`Runnable`接口,并重写`run`方法。然后,将这个实现了...
与标准C++库中的std::thread不同,QThread有自己的事件循环,使得线程可以处理信号和槽,这使得在QT环境中使用多线程更加方便和灵活。 二、QThread的创建 创建QThread对象时,通常会继承QThread并重写run()方法。...
在这个例子中,`startThread.start()`将在新线程上执行`run`方法,而`runThread.run()`则在主线程上执行。输出结果会显示两个不同的线程名称,说明`start`方法成功地创建了一个新的线程,而`run`方法则在主(或调用...
在这两种方法中,我们都需要重写 run() 函数,但是我们并不是直接调用 run() 函数,而是通过调用 start() 函数来启动线程。那我们为什么不直接调用 run() 函数呢?为什么总是调用 start() 函数来执行线程? 主要...
通常推荐将业务逻辑代码封装到独立的工作者对象(如`QObject`的子类)中,然后在`QThread`的`run()`中移动这个工作者对象到新线程,以避免线程安全问题。 在实际项目中,`QThread`的使用往往伴随着信号和槽的大量...
Java中启动线程start和run的两种方法 Java 中启动线程有两种方法,即继承 Thread 类和实现 Runnable 接口。由于 Java 无法实现多重继承,所以一般通过实现 Runnable 接口来创建线程。但是,无论哪种方法都可以通过 ...
在Java中,start()方法是用于启动线程的方法,而run()方法是线程的主体,即真正的逻辑所在。start()方法调用run()方法,使线程进入就绪状态,使线程所代表的虚拟处理机处于可运行状态。但是这并不意味着线程就会立即...
在跨线程通信中,应该使用异步连接,这样信号会在线程安全的方式下在接收对象的线程上下文中执行。 现在,让我们来看看如何在新线程中运行QT的Socket代码。首先,创建一个继承自QThread的新类,例如`SocketWorker`...
在Java编程语言中,理解和掌握线程的使用是至关重要的,特别是`Thread.start()`和`Thread.run()`这两个方法。它们在多线程编程中扮演着关键角色,但有着明显的区别。 首先,`Thread.start()`方法的主要作用是启动一...
标题"Qt中在子线程中调用定时器"指的是如何将定时器功能引入到非主线程中。下面是如何实现这一目标的步骤: 1. 创建子线程:首先,你需要定义一个继承自`QThread`的类,然后重写`run()`方法。在这个方法中,你可以...
在WPF中,可以使用`Task.Run`启动异步任务,然后在回调中使用Dispatcher返回到UI线程更新界面。 7. **线程同步与互斥量**: - 当需要控制多线程访问共享资源时,可以使用Mutex、Semaphore或Monitor等同步机制。...
Java线程中的`run()`和`start()`方法是线程编程中的关键概念,它们之间有着显著的区别。首先,我们来看一下这两个方法的基本解释。 1. `start()`方法:`start()`是真正启动线程的关键,它使得线程进入就绪(可运行...
start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。 run() : run()就和普通的成员方法一样,可以被...单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!
在Java多线程编程中,理解`Thread`类的`start()`和`run()`方法的区别至关重要。这两个方法在实现线程并发执行时起到不同的作用。 首先,`start()`方法是用于启动一个新的线程。当你调用`start()`方法时,Java虚拟机...
在这个例子中,当main()调用mythread.run()时,输出 "mythread.run() is running" 是在主线程中执行的,而调用mythread.start()则会启动一个新的线程,新线程执行run()方法,输出 "mythread.run() is running" 在这...