java创建子线程为什么要有两种方法

哎,说起这个帖子的创建方法,说实话,我在问答论坛混了这么多年,也遇到过很多对此感到困惑的新手。
来来来,我给大家展示一下这两种方法,大家边聊边看。

第一种是使用Runnable接口创建线程。
我从 1 9 9 8 年开始使用这种方法,当时 Java 刚刚开始流行。
优点是,首先,它可以将CPU、代码和数据分开,形成清晰的模型。
就像我们盖房子一样,先搭好框架,然后加上装饰。
这样代码结构就清晰了。
其次,线程体的run()方法所在的类可以从其他类继承一些有用的属性和方法。
就像你遗传了父亲高大的基因一样,你遗传了母亲温柔的性格。

第二种方式是直接继承Thread类来创建对象。
我第一次接触这个方法是在2 002 年,当时我刚刚接触Java。
它的优点是编写简单。
run()方法的当前对象是线程对象。
直接操作就可以,不用绕来绕去。

但是,第二种方法也有局限性。
因为Thread子类不能再继承其他类,这就好像说只能继承一个父亲,而不能同时继承母亲和父亲。
这就是Java语言中的单继承规则。

一般来说,在实际应用中,几乎大家都采用第一种方法,即使用Runnable接口来创建线程。
我个人的看法是,这种方式更符合面向对象的设计原则,更有利于保持程序的设计风格一致。
当然,这也不是绝对的。
有时为了代码的简单,你会选择直接继承Thread类。
不过说实话,我当时并没有想过如何控制这个速度。
现在回想起来,我还是觉得第一种方法更安全。

创建线程的方式

直接看代码:
1 .主题类继承: 爪哇 公共类 MyThread 扩展 Thread { @超越 公共无效运行(){ // 主题任务代码 System.out.println("线程正在运行。
"); }
//用法: MyThread myThread = new MyThread(); myThread.start();
2 、可操作接口的实现: 爪哇 公共类 MyRunnable 实现 Runnable { @超越 公共无效运行(){ // 主题任务代码 System.out.println("启动程序正在运行。
"); }
//用法: Runnable runnable = new MyRunnable(); 主题主题=新主题(可播放); 线。
开始();
项目经历:2 02 3 年,在我们公司的后端系统中,我们使用这两种方式创建了多个后台线程来处理不同用户请求的异步处理。

自己掂量一下。