Java中的多线程
Java中的线程是一个小而轻的进程。许多线程可以在一个进程中运行,每个线程必须是一个进程的一部分,因为它不能独立存在。
多线程
多线程是指同时执行许多线程的过程。它能确保CPU得到最大程度的利用。这意味着,一个进程可以同时做许多任务。
例如,一个线程可以从数据库中读取数据,而另一个线程则同时将数据写入文件中。
多任务处理
多任务是指同时执行几个任务的过程。它有助于减少CPU的闲置时间。多任务处理的是多个进程同时执行多个任务,而多线程处理的是单个进程中的多个线程执行多个任务。
多线程的好处
- 使我们能够同时执行两个或多个任务。
- 线程是独立的,不会影响并发线程的性能。
- 一个线程的执行不会打断其他线程。这对服务于多个客户、多人游戏或其他相互独立的任务很有帮助。
- 我们可以把一个程序分成线程,并并行执行,从而提高程序的执行速度。
一个线程的生命周期
以下是一个线程在执行过程中所经历的步骤。
New: 一个线程还没有开始执行。Runnable: 一个线程已经调用了start()方法,但是还没有被分配到CPU。Running: 一个线程已经被分配到CPU上执行。Blocked: 如果一个线程被阻止进入可运行状态并进入运行状态,那么它就被称为处于阻塞状态。Terminated:一个线程已经完成了执行。
创建一个线程
我们可以使用以下两种方法来创建线程。
1.通过扩展线程类
使用这种方法创建的线程遵循以下语法。
public class Main extends Thread {
public void run() {
//statement
}
}
public void run() 方法用于执行一个线程的任务。它包含要执行的代码。
2.通过实现Runnable
一个 "实现 "了Runnable 接口的线程遵循下面的语法。
public class Main implements Runnable {
public void run() {
//statement
}
}
启动一个线程
我们使用start() 方法来启动一个线程。让我们在一个例子中使用start() 方法来启动一个线程。
- 通过扩展
Thread类通过扩展Thread类,我们可以创建一个类的实例并调用start()方法。
public class Main extends Thread {
public static void main(String[] args) {
Main thread = new Main(); // creates the class instance
thread.start();
}
public void run() {
System.out.println("This is a running thread");
}
}
一个Java程序的执行是从main 方法开始的。JVM创建一个线程来开始执行main 方法中的代码,它被称为主线程。其他线程是由主线程产生的,并且必须总是最后一个完成执行。
- 通过实现
Runnable接口我们使用new关键字创建线程的实例。然后我们指定一个属于Thread的子类,即Main,作为new关键字的参数。
然后,最后我们调用start() 方法。
public class Main implements Runnable {
public static void main(String[] args) {
Main obj = new Main(); // creates the class instance
Thread t1 = new Thread(obj); // creates the thread instance
t1.start(); // starts the thread
}
public void run() {
System.out.println("This is a running thread");
}
}
isAlive()方法
isAlive() 方法是用来检查一个线程是否已经执行完毕。如果该线程仍在运行,它将返回true,否则返回false。如果我们在启动方法之前使用isAlive 方法,那么它将打印出false,但在启动方法之后,它将打印出true。
让我们看一个例子,我们使用Runnable 接口。
public class Main implements Runnable {
public void run() {
Thread t = Thread.currentThread();
// checks if this thread is alive
System.out.println(t.isAlive());
}
public static void main(String args[]) throws Exception {
Thread t = new Thread(new Main());
// this statement will call the run() method
t.start();
// makes the thread to sleep for 500 milliseconds
t.sleep(500);
// checks if this thread is alive
System.out.println(t.isAlive());
}
}
输出。
true
false
线程类中使用的常用方法
public void run():用于执行某个线程的某个任务。public void start():一个线程的执行从这里开始。public void sleep(long milliseconds):使执行中的线程暂时休眠一段指定时间。public void join():用于等待一个线程完成其执行。public void join(long milliseconds):用于等待一个线程完成其执行,时间为指定的毫秒。public int setPriority(int priority):一个线程根据其优先级被分配到CPU上。每当我们创建一个线程,它就会被JVM分配优先级,或者我们可以使用setPriority(int priority)方法直接分配。public int getPriority():一个线程的优先级由这个方法显示。public String getName():这显示了线程的名称。public void setName(String name):使用此方法可以改变线程的名称。
总结
线程是独立的,可以同时执行多个任务。我们已经了解了线程生命周期的各个阶段,创建线程的各种方法,以及如何启动线程。