"[图片] 前言 在学习本教程之前,你对以下知识有所了解: Java 的类、方法、变量 extend 的用法和用处 Java 实例化 本篇教程难度:★☆☆☆☆ 多线程是计算机的灵魂,目的是为了同时做很多事情。 你可能不知道,早期的操作系统一次只能运行一个程序,如果要切换程序,必须关闭当前程序,早期的 iPhone 便是如 .."

实例带你学会简单的 Java Thread 多线程

v225bf940c85ff02907858b71e40ee448fhd.jpg

前言

在学习本教程之前,你对以下知识有所了解:

本篇教程难度:★☆☆☆☆

多线程是计算机的灵魂,目的是为了同时做很多事情

你可能不知道,早期的操作系统一次只能运行一个程序,如果要切换程序,必须关闭当前程序,早期的 iPhone 便是如此。

拷贝

废话少说,在你的 IDE 中新建一个 Java 项目或类用于存放本次多线程的代码。 我建议将类命名为:ThreadDemo,这样在拷贝代码后不需要修改类名。

复制下方代码到你的类中:

import java.text.SimpleDateFormat;
import java.util.Date;

public class ThreadDemo {
    public static void main(String[] args) {
        // 实例化当前类
        ThreadDemo threadDemo = new ThreadDemo();
        // 调用动态类
        threadDemo.run();
    }
    
    public void run() {
        ThreadTest1 threadTest1 = new ThreadTest1();
        threadTest1.run();
        threadTest1.run();
        threadTest1.run();
        threadTest1.run();
        threadTest1.run();
    }
}

/**
 * 线程 1
 */
class ThreadTest1 extends Thread {
    @Override
    public void run() {
        // 获取当前时间
        Date day = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 点 mm 分 ss 秒 SSS 毫秒");
        // 打印当前时间
        System.out.println("现在是:" + df.format(day));
    }
}

让我们分开理解

线程类

class ThreadTest1 extends Thread {
    @Override
    public void run() {
        // 获取当前时间
        Date day = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 点 mm 分 ss 秒 SSS 毫秒");
        // 打印当前时间
        System.out.println("现在是:" + df.format(day));
    }
}

该类继承了Thread多线程类,所以这个类就支持多线程了 ~ 该类中的方法:

    @Override
    public void run() {
        //获取当前时间
        Date day = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒SSS毫秒");
        //打印当前时间
        System.out.println("现在是:" + df.format(day));
    }

下方知识如果不理解可以直接跳过,在未来的学习中你自然会懂: @Override在本文表示对 extend 的Thread类的run()方法进行重写run()方法是线程运行的方法,其中的方法完全由你来定义;

你需要知道的: 你可以自由修改run()方法里面所有的内容,它将在接收到执行命令时被执行。

执行方法

    public static void main(String[] args) {
        // 实例化当前类
        ThreadDemo threadDemo = new ThreadDemo();
        // 调用动态类
        threadDemo.run();
    }

    public void run() {
        ThreadTest1 threadTest1 = new ThreadTest1();
        threadTest1.run();
        threadTest1.run();
        threadTest1.run();
        threadTest1.run();
        threadTest1.run();
    }

首先主方法里面的代码是用来执行run()方法的。这么写的原因是因为主方法是静态方法,使其调用一个动态方法的原因是动态方法更加灵活,因此你可以无视主方法,直接阅读run()方法。 注意:此处的run()方法和ThreadTest类中的run()方法不是同一个方法。

继续看:

        ThreadTest1 threadTest1 = new ThreadTest1();
        threadTest1.run();
        threadTest1.run();
        threadTest1.run();
        threadTest1.run();
        threadTest1.run();

在该方法中,我们将ThreadTest类进行实例化,这样我们就能执行这个线程了。并且我们将该线程执行了5次。

运行!

现在,运行主方法,你会得到如下结果:

现在是:20190316122120685毫秒
现在是:20190316122120743毫秒
现在是:20190316122120744毫秒
现在是:20190316122120744毫秒
现在是:20190316122120744毫秒

可以看到,我们成功执行了五个线程,并得到了预期的运行结果。

疑问

? 为什么多线程执行后的结果,毫秒不相同? ! 仔细看你会发现,这五次的多线程执行后的时间是由小到大的,所以线程被提交是有间隔时间并且是被顺序执行的。

后语

这是多线程的基本使用,如果需要继续了解线程池的知识,请点这里

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2150 引用 • 7245 回帖 • 1054 关注
  • 代码
    81 引用 • 392 回帖
感谢    关注    收藏    赞同    反对    举报    分享
回帖    
请输入回帖内容...