全干工程师

Java-Logo

Java线程简介

现代计算机系统设计有多个 CPU 内核。这些内核允许多个进程(或一个进程的多个线程)在不同的内核上同时运行。

这一过程(称为多线程)背后的理念是确保优化 CPU 的使用,提高应用程序性能。作为程序员,您可以设计允许多个线程同时并行执行的程序,而不是一次执行一个线程。

在本教程中,将学习如何使用Java API创建多线程应用程序。

什么是 Java 中的线程?

Java和其他编程语言中,线程是CPU利用率的基本单位。线程是进程的一部分。了解进程的一个简单方法就是想象一个正在执行的程序。

不过,这个定义并非百分之百准确。一个程序有可能有多个进程。上面提供的定义只是看待进程的一种简单而有用的方法。

如前所述,进程包含线程。线程与同一进程中的其他线程共享进程的数据、代码和其他资源。

在Java中,开发人员可以构建多线程应用程序。多线程允许程序的各个部分并发或平行运行,从而大大提高应用程序的性能。

重要的是要区分并发和并行。程序可以并发运行,但不能并行运行。

并发是指同一程序的多个部分被执行(不是同时执行)。这些不同的部分通过时间共享来执行。另一方面,并行是指同一程序的多个部分同时执行。

单核系统可以通过交错实现并行。但在多核系统上,并行性只能通过在不同内核上运行多个线程来实现。

线程还可用于抵消进程创建过程中产生的性能开销。在执行程序必须执行的重复任务时,这一点尤为重要。

Web服务器就是一个很好的例子。每次用户发出请求时,您都可以让服务器创建一个新进程。但是,这就要求在处理下一个用户的请求之前,首先要完成一个用户的请求。

如果您使用的是多线程应用程序,您的服务器只需使用一个新线程来处理新请求即可。由于线程共享进程中的相同资源,这就省去了程序分配新资源的需要和随之而来的开销。

如何在 Java 中实现线程

Java应用程序中使用线程有两种方法。第一种方法是实现Runnable接口。实现该接口后,您必须在类中提供run()方法的主体。您的线程将运行这段代码。下面的代码示例展示了如何使用Runnable接口在 Java 中实现线程:

class Y implements Runnable {
	void run(){
	// must provide method body
	}
}

使用线程的第二种方法是扩展Thread类,该类本身实现了Runnable接口。在子类中,你需要重写run()方法,如下所示:

class Z extends Thread {
}

请参阅下面的完整工作代码示例:

class ThreadDemo extends Thread{

   public static void main(String args[]) {
       System.out.println("Printed from the thread of main()");
       ThreadDemo demo = new ThreadDemo();
       demo.start();
   }
  
   public void run(){
       System.out.println("Printed from the thread of run()");
   }
}

在上面的例子中,程序中有两个线程。第一个线程来自main()方法,因为程序从这里开始执行。程序中的第二个线程来自run()方法。需要注意的是,在实例化类时,线程并不是立即创建的。线程是在调用start() 方法时创建的。

还想了解有关在 Java 中创建多线程的更多信息?查看我们的教程:多线程简介

总结

本教程介绍了如何使用Java Threads API以及多线程的好处。在编写常规 Java 应用程序时,您可能只需让 JVM 帮您处理线程。

JVM 通常一次运行一个程序线程,这可能不适合要求速度的系统,如游戏应用程序。因此您有必要学习如何创建多线程应用程序。

本文章翻译于Introduction to Using Threads in Java

留言