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