• 02_线程的创建和启动_继承Thread方式


    【简述】

    java使用Thread类代表线程,所有的线程都必须是Thread或者其子类的实例。

    每个线程的任务就是完成一定的任务,实际上就是执行一段程序流。

    【创建并启动多线程的步骤(集成Thread类方式)】

    1.定义继承Thread类的子类,重写run方法:run()方法就代表了线程需要完成的任务,故run()方法称为:线程执行体。

    2.创建线程对象:即创建Thread子类的实例。

    3.启动线程:调用线程对象的start()方法来。

    【示例代码FirstThread.java】

    package com.Higgin.part01;
    
    //1.1定义继承Thread类的子类FirstThread
    class FirstThread extends Thread{
        //1.2重写run方法
        public void run(){
            for(int i=0;i<10;i++){
                //注意:当线程继承Thread类时,直接使用this.getName()即可获得当前线程的名字
                System.out.println(this.getName()+"===="+i);
            }
        }
    }
    
    
    public class Demo1{
    
        public static void main(String[] args) {
            //2.创建线程对象
            FirstThread t1=new FirstThread();
            //3.启动线程
            t1.start();
            //2.创建线程对象
            FirstThread t2=new FirstThread();
            //3.启动线程
            t2.start();
            
            for(int i=0;i<10;i++){
                //调用Thread.currentThrad().getName()可获得当前线程的名字
                System.out.println(Thread.currentThread().getName()+"===="+i);
            }
        }
    }

     【注意!!!】

    启动线程使用 start()方法,不是run()方法!!永远不要调用线程对象的run()方法!!!

    调用start()方法,系统会把run()方法当成线程执行体来处理。

    直接调用run()方法,则run()方法会立即被执行,系统会把线程对象当成一个普通对象来处理,run()方法也变成了一个普通的方法

     另外,直接调用线程对象的run()方法,则run()方法内不能通过getName()来获得当前执行线程的名字,而是需要使用Thread.currentThread先获得当前线程,再调用线程的getName()方法来获得线程的名字。

    另外,调用了线程的run()方法之后,该线程已经不再处于新建状态,不要再次调用线程对象的start()方法,只能对处于新建状态的线程调用start()方法,否则会引发IllegalThreadStateException异常。

    【运行结果】

    【注意一:主线程勿忘】

     java程序开始运行时,程序至少会创建一个主线程,不要忘记了,本例中的main()方法的方法体就是主线程的线程执行体。

    【注意二:两个读取线程名字的方法的区别】

    1. Thread.currentThread():currentThread()是Thread类的静态方法,该方法是获取当前正在执行的线程的线程对象

    2.getName():该方法是Thread类的实例方法,该方法返回调用该方法的线程的名字

    【注意三:关于线程名字】

    1.默认情况下,主线程的名字是main,用户启动的线程名字依次是:Thread-0、Thread-1......

    2.当然,可以通过setName(String name)来设置对应的线程的名字。

  • 相关阅读:
    😉P03 Go 基础知识😉
    😎P03 DB 数据库的约束条件、表关系、修改表语法以及复制表😎
    😉P02 Go 快速上手😉
    C# NPOI导出Excel横向纵向显示
    C# 批量上传文件 添加图片水印
    C# 压缩ZIP
    SQL Server循环插入100000条数据
    C# 特殊字符过滤拦截
    C# 导入Excel到数据库
    C# 实现批量删除功能
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5901544.html
Copyright © 2020-2023  润新知