[Java]Java初学之多线程02--创建线程

Intro

Java线程的创建有三种方法,本文主要记录、总结其中两种方法(Thread, Runnable)的实现以及各自的优缺点。

正文

Java中,创建线程的两种方法分别是
第一种:继承Thread类
第二种:实现Runnable接口

继承Thread类

先说第一种,通过继承Thread类创建线程。
通过翻查JDK的帮助文档,我们可以找到官方的指导,如图所示

image

总结下来,创建的流程就是这样

  1. 自定义线程类继承Thread类
  2. 重写run()方法,编写线程执行体
  3. 创建线程对象,调用start()方法启动线程

知道了怎么创建,就可以开始写啦,很快就可以写一个简单demo:

package com.multiThread;
//this is a demo about how to creat a thread
//创建线程的方法1:继承Thread类,重写run()方法,调用Start开启线程
public class demo01 extends Thread {
    @Override
    public void run() {
        //run方法线程体
        for (int i = 0; i < 20; i++) {
            System.out.println("SUB the" + i + "time");
        }
    }

    public static void main(String[] args) {
        //main线程(主)
        demo01 testThread = new demo01();
        //调用Start方法则主线程子线程一起跑(CPU调度执行),因此SUB MAIN互相穿插
        //如果调用run则顺序执行
        //testThread.run();
        testThread.start();
        for (int i = 0; i < 20; i++){
            System.out.println("MAIN the" + i + "time");
        }
    }
}

执行的结果是MAIN和SUB交错输出,由CPU调度执行主/子线程,所以每次运行输出的结果都会有所不同

image

实现Runnable接口

第二种方法是通过实现Runnable接口来创建线程
在JDK帮助文档的Thread部分继续往下翻看就能看到第二种方法的官方指导,如图所示

image

总结下来,创建的流程就是这样

  1. 自定义线程类实现Runnable接口
  2. 实现run()方法,编写线程执行体
  3. 创建线程对象,调用start()方法启动线程

一个简单的demo:

package com.multiThread;
//创建线程的第二种方法:实现runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法
public class demo03 implements Runnable {
    @Override
    public void run() {
        //run方法线程体
        for (int i = 0; i < 20; i++) {
            System.out.println("SUB the" + i + "time");
        }
    }
    public static void main(String[] args) {
        //创建Runnable接口的实现类对象
        demo03 testThread3 = new demo03();
        //创建线程对象,通过线程对象来开启线程,代理
//        Thread thread = new Thread(testThread3);
//        thread.start(); 此两行可以总结为下一行
        new Thread(testThread3).start();
        for (int i = 0; i < 20; i++){
            System.out.println("MAIN the" + i + "time");
        }
    }
}

最后的输出也是和上面一样的

小结

继承Thread类

  • 具备多线程能力
  • 启动线程:子类对象.start();
  • 不建议使用:避免OOP单继承的局限性

实现Runnable接口

  • 具有多线程能力
  • 启动线程:传入目标对象+Thread对象.start();
  • 推荐使用:灵活方便,方便同一个对象被多个线程使用
posted @   ZoeXxx  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示