Java教程中的多线程
我们将看到很多多任务处理示例,其中计算机程序一次处理多个任务。例如,我们可以在使用任何编辑器的同时启动播放器并播放歌曲,并同时打印100页的文档。这是一个示例,其中多个独立进程同时运行。在同一程序中使用相同的方法,我们可以运行多个任务,例如在歌曲播放器中可以开始播放歌曲,并同时单击"添加歌曲"按钮以将更多歌曲添加到播放列表中。在程序中,这些单独的运行任务称为线程,而将程序分为多个单独的子任务以使其更快,响应更快的概念称为多线程。
Java多线程
Java是最早为多线程编程提供内置支持的编程语言之一。
在Java多线程中,主要类是Thread类,Java中的任何线程都是Thread类的对象,并且该线程执行的代码在Thread类的run()方法中提供。我们将需要重写run()方法并提供所需的功能。
请参阅如何在Java中创建和启动线程,以了解可以在Java中创建线程的方法。
当Java应用程序启动时,我们仅从一个线程(在Java中称为主线程)开始。该线程具有创建其他线程的能力,这些线程可以执行特定任务。我们将必须以这样一种方式划分应用程序,即可以通过单独的线程而不是主线程执行所有任务来执行单独的子任务。
Java多线程示例
这是一个Java程序,它显示了通过实现Runnable接口创建线程的过程,并且还显示了主线程。调用创建的线程的start()方法后,它将执行run()方法并显示线程的名称。一旦该线程终止,控制权将再次转到主线程,该主线程还将显示其名称。
class AnotherThread implements Runnable{ @Override public void run() { System.out.println("run method of Another thread --" + Thread.currentThread().getName()); } } public class ThreadDemo { public static void main(String[] args) { Thread thread = new Thread(new AnotherThread(), "AnotherThread"); thread.start(); System.out.println("Main thread " + Thread.currentThread().getName()); } }
输出:
Main thread main run method of Another thread –AnotherThread
Java多线程中线程的生命周期
在Java多线程中,线程可以经历许多存在状态。在线程上调用start()方法后,它就处于可运行状态。一旦开始运行,就可以将其挂起,并将控制权交给另一个线程。挂起的线程可以再次恢复其操作。如果线程正在等待共享资源,则它也可以处于阻塞状态。一旦线程完成其操作,它将终止。
请参阅Java中的线程生命周期(线程状态)以了解有关Java中线程状态的更多信息。
线程与进程之间的区别
如开头所述,在并发编程中,有两种类型的多任务处理:
- 基于流程的多任务处理。
- 基于线程的多任务处理。
尽管本教程是关于Java中的多线程的,但是为了更好地理解,我们应该了解Java中线程和进程之间的区别。
Java中的线程与进程
- 流程具有独立的执行环境。进程具有自己的运行时资源,例如内存空间。线程存在于一个进程中-每个进程至少有一个。线程共享进程的资源,包括内存和打开的文件。
- 进程是在它们自己分配的内存空间中运行的重量级任务。线程是在进程中生成的轻量级线程,并共享其内存。
- 进程是具有各自独立资源的独立单元,因此进程间通信非常昂贵。线程在一个进程中共享资源,因此线程间的通信很容易,但同时需要特别注意线程之间共享资源的安全保护。
- 从一个进程切换到另一个进程的上下文非常耗时,因为保存正在运行的进程的状态很耗时。在线程之间进行上下文切换并不耗时。