线程(Thread)是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际运作单位,是指进程中一个单一的顺序控制流。Java中的线程是Java虚拟机(JVM)管理的一种资源,直接操作系统的线程是Java语言所不允许的。
Java中的线程可以通过实现Runnable接口或继承Thread类来创建。实现Runnable接口的线程更为常用,因为这样可以实现代码复用,并且java不支持多继承。
Java中的线程具有以下特点:
-
Java中的线程是轻量级的,创建和销毁所需时间和资源极少
-
线程属于进程,多个线程共享进程的资源
-
线程有各自执行的代码,但是线程间共享的是进程的资源
-
由于线程的调度是由JVM控制的,因此Java中的多线程并不保证线程的执行次序
以下是一个通过实现Runnable接口来创建线程的示例:
// 定义线程类
class MyThread implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " is running");
}
}
// 主函数
public static void main(String[] args) {
// 创建3个线程
MyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
MyThread myThread3 = new MyThread();
// 开始线程执行
new Thread(myThread1).start();
new Thread(myThread2).start();
new Thread(myThread3).start();
}
以上代码中,MyThread类实现了Runnable接口,并重写了run方法。通过创建新的线程对象并传递MyThread对象,然后调用start方法,使新线程进入可运行状态,一旦获取CPU时间片,就会执行run方法里面的内容。执行结果不保证三个线程的运行次序。
另一个示例是通过继承Thread类来创建线程:
// 定义线程类
class MyThread extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " is running");
}
}
// 主函数
public static void main(String[] args) {
// 创建3个线程
MyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
MyThread myThread3 = new MyThread();
// 开始线程执行
myThread1.start();
myThread2.start();
myThread3.start();
}
以上代码中,MyThread类继承了Thread类,并重写了run方法。通过创建新的线程对象,然后调用start方法,使新线程进入可运行状态,一旦获取CPU时间片,就会执行run方法里面的内容。执行结果不保证三个线程的运行次序。