`

线程的创建和启动

阅读更多
java语言已经内置了多线程支持,所有实现Runnable接口的类都可被启动一个新线程,新线程会执行该实例的run()方法,当run()方法执行完毕后,线程就结束了。一旦一个线程执行完毕,这个实例就不能再重新启动,只能重新生成一个新实例,再启动一个新线程。

Thread类是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法:

Thread t = new Thread();
t.start();

start()方法是一个native方法,它将启动一个新线程,并执行run()方法。Thread类默认的run()方法什么也不做就退出了。注意:直接调用run()方法并不会启动一个新线程,它和调用一个普通的java方法没有什么区别。

因此,有两个方法可以实现自己的线程:

方法1:自己的类extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:

public class MyThread extends Thread {
    public run() {
        System.out.println("MyThread.run()");
    }
}

在合适的地方启动线程:new MyThread().start();

方法2:如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口:

public class MyThread extends OtherClass implements Runnable {
    public run() {
        System.out.println("MyThread.run()");
    }
}

为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:

MyThread myt = new MyThread();
Thread t = new Thread(myt);
t.start();

事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:

public void run() {
    if (target != null) {
        target.run();
    }
}

线程还有一些Name, ThreadGroup, isDaemon等设置,由于和线程设计模式关联很少,这里就不多说了。
分享到:
评论

相关推荐

    线程创建和管理

    线程创建和管理 线程创建和管理是多线程编程中一个非常重要的概念,在实际开发中,合理地创建和管理线程可以提高程序的效率和性能。在C#中,线程池和Thread类是两种常用的线程创建和管理方式。 一、线程池...

    易语言多线程多次启动一个子程序

    通过理解多线程的基本概念,掌握易语言中的线程创建和管理方法,以及注意线程安全和同步,你可以编写出高效且稳定的多线程程序。在实际开发中,不断实践和优化,将是提升多线程编程能力的关键。

    单线程的启动和结束.rar

    本教程将通过"单线程的启动和结束"这个主题,帮助你快速理解如何在MFC环境中控制线程的生命周期。 首先,让我们明确什么是线程。线程是程序执行的最小单元,每个进程至少包含一个线程。在多线程程序中,多个线程...

    一个简单的多线程例子,启动线程与终止线程。

    本示例提供了一个简单的多线程应用,旨在帮助理解如何创建、启动和停止线程。以下将详细讲解相关知识点。 首先,我们讨论如何**创建多线程**。在Java中,有两种主要的方法来创建线程:通过继承Thread类或实现...

    在线程中启动进程

    标题“在线程中启动进程”指的是在主线程中创建多个线程,而每个线程又各自启动一个独立的进程。这种模式常用于需要执行耗时操作,但又希望保持主线程的响应性,或者利用多核处理器的计算能力。 描述中提到的“通过...

    C#内存释放-线程控制-线程启动-线程暂停

    `Thread`类是最基本的线程对象,用于创建和执行新的线程。线程启动通常是通过`Thread.Start()`方法完成的,这使得新线程开始执行其`ThreadStart`委托所指向的方法。线程的暂停则相对复杂,因为线程的暂停和恢复并不...

    易语言类中启动线程

    3. 易语言线程创建: 易语言提供了“创建线程”命令来创建新的线程。通常,我们需要定义一个函数(或子程序)作为线程的入口点,该函数将在新线程中运行。在类中,这个函数通常被声明为类的成员函数。 4. 类中启动...

    MFC线程挂起和启动

    1. **MFC线程创建** MFC提供了两种创建线程的方式:静态成员线程类和动态链接库线程类。静态成员线程类使用CWinThread派生类的静态成员函数AfxBeginThread来创建,而动态链接库线程类则通过AfxDLLThreadAttach和...

    MFC多线程的创建,包括工作线程和用户界面线程

    在MFC中,线程可以通过 `ResumeThread` 和 `SuspendThread` 方法实现启动和挂起: - **启动线程**:`ResumeThread` 使一个挂起状态的线程继续执行。 - **挂起线程**:`SuspendThread` 将正在运行的线程置于挂起状态...

    易语言启动线程+循环+延时=时钟(循环)源码,易语言启动线程+循环+

    在易语言中,“启动线程”、“循环”和“延时”是三个重要的编程概念,它们在创建实时、响应式的程序中起到关键作用。 首先,我们要理解“启动线程”。在计算机编程中,线程是程序执行的最小单元,每个线程代表了...

    VS2019 MFC线程的创建

    总结起来,VS2019中的MFC线程创建涉及到创建自定义线程类、覆写关键成员函数、使用 `AfxBeginThread()` 创建线程以及进行线程同步。理解这些概念和实践,对于开发高效、稳定的多线程MFC应用至关重要。

    易语言源码易语言多线程多次启动一个子程序源码.rar

    这有助于减少线程创建和销毁的开销,提高系统的效率。易语言中可能需要自定义实现线程池,或者使用第三方库来支持这一功能。 总结来说,这个压缩包提供的易语言源码实例展示了如何利用易语言进行多线程编程,包括...

    Java使用Callable和Future创建线程操作示例

    不同的线程创建方式都有其优缺,需要根据实际情况选择合适的线程创建方式。 本文主要介绍了Java使用Callable和Future创建线程操作的相关操作技巧与注意事项,为需要的朋友提供了有价值的参考。同时,本站还提供了更...

    JAVA 线程中启动线程

    1. **线程创建方式** - **实现Runnable接口**:这是最常见的创建线程的方式,只需创建一个类实现`Runnable`接口,然后在`run()`方法中编写线程执行的代码。接着,通过`Thread`类的构造函数创建一个新的线程对象,将...

    C# Winform线程创建子窗体

    注意,`Thread.Start()`启动了新线程。 然而,跨线程操作主窗体的控件可能会引发`CrossThreadException`异常,因为Windows Forms控件只能在其创建的线程中被修改。为了解决这个问题,我们可以使用`Control.Invoke`...

    C#092线程的启动和停止 源代码

    线程的启动和停止是进行并发编程时的关键操作,理解这些概念对于编写高效的多线程应用程序至关重要。本资源“C#092线程的启动和停止 源代码”提供了实际的代码示例,帮助开发者深入理解线程管理。 线程的启动通常...

    易语言启动线程参数的用处

    子程序1可能就是这样一个启动线程的入口,它接收参数,创建并启动新的线程,然后在线程的主函数中使用这些参数。 学习易语言启动线程参数的用处,有助于开发者更好地理解和利用线程,编写出更高效、更稳定的多线程...

    创建一个带三个子线程的程序,第一个线程启动10ms后

    创建一个带三个子线程的程序,第一个线程启动10ms后,第二个线程再启动,然后再等待10ms后第三个线程启动,每一个线程从1—1000循环输出线程的名称和计数,当三个线程结束时要输出各自的结束信息,然后主线程结束。

    C# winform动态创建和关闭多线程源码 可运行

    线程池可以重用已存在的线程,减少了线程创建和销毁的开销。通过ThreadPool.QueueUserWorkItem方法,我们可以将任务添加到线程池中。 总结: 这个C# Winform项目展示了如何在运行时创建和关闭线程,以及如何安全地...

Global site tag (gtag.js) - Google Analytics