写点什么

Java 多线程开发系列 2:创建一个线程

作者:BigBang!
  • 2023-11-08
    广东
  • 本文字数:1147 字

    阅读完需:约 4 分钟

Java 多线程开发系列 2:创建一个线程

一、创建线程的方式


在 Java 中,有两种创建线程的方式。


方式 1:继承 Thread 类:这种方式是通过创建一个新类,继承自 Thread 类,然后重写 run()方法来实现线程的运行。

package demo;
class MyThread extends Thread { @Override public void run() { System.out.println("当前线程ID:" + Thread.currentThread().getId()); }}
public class CreateThread { public static void main(String[] args) { System.out.println("当前线程ID: " + Thread.currentThread().getId()); MyThread myThread = new MyThread(); //myThread.run(); myThread.start(); // 启动线程 }}
复制代码

方式 2:将 Runnable 传给 Thread:这种方式是通过创建一个实现了 Runnable 接口的类,然后将这个类的实例传递给 Thread 类的构造方法。

package demo;
class MyRunnable implements Runnable { @Override public void run() { System.out.println("当前线程ID:" + Thread.currentThread().getId()); }}

public class CreateThread2 { public static void main(String[] args) { System.out.println("当前线程ID: " + Thread.currentThread().getId()); Thread thread = new Thread(new MyRunnable()); thread.start(); // 启动线程
//java 8以后,可以用lambda直接创建runnable Thread thread2 = new Thread(() -> { System.out.println("当前线程ID:" + Thread.currentThread().getId()); }); thread2.start(); }}

复制代码


注意:创建线程后需要调用 start()方法,线程才会真正运行。你可以尝试一下,直接调用线程的 run()方法,看看会发生什么?


为什么 Java 语言要提供两种创建线程的方式?答案是:为了满足两种不同的场景。


第一种创建线程的方式,我们发现线程的 run 方法是提前定义好的,因此每次你创建一个线程,这个线程只能执行特定的逻辑,不能在运行时进行改变。从 Java 语言本身的限制看,由于 Java 只能单继承,如果一个类继承了其它类,就不能再继承 Thread 类了。


第二种创建线程的方式,你可以在运行时组装不同的 runnable 接口实现,从而让线程执行不同的逻辑。比如一个 web 服务器,每次接收一个请求,可以创建一个新的线程来处理,这个请求可能是查询数据,也可能是生成图片,因此需要在创建线程时动态指定线程要做的事(runnable)。

二、Java 线程的背后


在 Java 21 以前,Java 创建的线程背后,都是一个操作系统线程,java 的线程只是对系统线程的一个轻量级封装,通过 JNI 技术来将任务代理给操作系统,最终要依靠系统的线程执行来完成任务,因此是比较重量的实现。Java 21 正式发布了虚拟线程以支持创建非常轻量级的线程,后面会专门讲到。

发布于: 刚刚阅读数: 3
用户头像

BigBang!

关注

宁静致远,快乐随行,知行合一,得大自在! 2008-10-08 加入

一个程序员,一名架构师,一位技术管理人......

评论

发布
暂无评论
Java 多线程开发系列 2:创建一个线程_Java多线程_BigBang!_InfoQ写作社区