Java创建线程的2种方式(附带实例)
Java 语言提供了 Thread 作为线程类,它位于 java.lang 包中。当我们的任务不能在当前线程中执行时就可以创建一个 Thread 对象,然后启动该线程去执行。
实际上定义线程有两种方式,一种是直接继承 java.lang.Thread 类,另一种则是实现 java.lang.Runnable 接口。
Thread 类是对 Java 线程的抽象,每个 Thread 对象都包含了各种属性,如线程优先级,也包含了各种操作,如启动操作。通常我们会使用如下的四个构造方法来创建线程对象:
下面我们来看看具体如何创建线程对象。
定义好线程类后就可以分别通过“new MyThread()”和“new Thread(new MyThread2())”来创建线程对象,然后调用 start() 方法即可启动线程。
可以看到一共有三个线程,第一个是名为 main 的主线程,后两个则是我们自定义创建的线程,它们的名字由 JDK 自动生成,也可以自行指定线程名传入构造方法。
我们还可以使用一种简化的方式来创建并启动一个新线程,即通过“new Thread(() -> {})”的方式,其中任务逻辑写在大括号内,如下面的代码所示。
实际上定义线程有两种方式,一种是直接继承 java.lang.Thread 类,另一种则是实现 java.lang.Runnable 接口。
Thread 类是对 Java 线程的抽象,每个 Thread 对象都包含了各种属性,如线程优先级,也包含了各种操作,如启动操作。通常我们会使用如下的四个构造方法来创建线程对象:
public Thread() public Thread(String name) public Thread(Runnable target) public Thread(Runnable target, String name)其中的参数 name 为线程名。后面两个构造方法是第二种创建线程的方法,通过 Runnable 接口指定线程的任务。
下面我们来看看具体如何创建线程对象。
public class ThreadTest { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); new MyThread().start(); new Thread(new MyThread2()).start(); } } class MyThread extends Thread { public void run() { System.out.println(Thread.currentThread().getName()); } } class MyThread2 implements Runnable { public void run() { System.out.println(Thread.currentThread().getName()); } }输出如下:
main
Thread-0
Thread-1
- 第一种是自定义 MyThread 线程类去继承 Thread 类并重写 run() 方法;
- 第二种是自定义 MyThread2 线程类去实现 Runnable 接口并实现 run() 方法。
定义好线程类后就可以分别通过“new MyThread()”和“new Thread(new MyThread2())”来创建线程对象,然后调用 start() 方法即可启动线程。
可以看到一共有三个线程,第一个是名为 main 的主线程,后两个则是我们自定义创建的线程,它们的名字由 JDK 自动生成,也可以自行指定线程名传入构造方法。
我们还可以使用一种简化的方式来创建并启动一个新线程,即通过“new Thread(() -> {})”的方式,其中任务逻辑写在大括号内,如下面的代码所示。
public class ThreadTest2 { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); new Thread(() -> { System.out.println(Thread.currentThread().getName()); }).start(); } }输出结果:
main
Thread-0