<JavaEE> 线程的五种创建方法 和 查看线程的两种方式

news/2024/7/24 13:11:58 标签: java-ee, 进程和线程

目录

一、线程的创建方法

1.1 继承 Thread -> 重写 run 方法

1.2 使用匿名内部类 -> 继承 Thread -> 重写 run 方法

1.3 实现 Runnable 接口 -> 重写 run 方法

1.4 使用匿名内部类 -> 实现 Runnable 接口 -> 重写 run 方法

1.5 使用 lambda 表达式

二、查看线程的方法

2.1 jconsole 工具

2.2 IDEA Debug 调试器


一、线程的创建方法

以下分别介绍五种线程的创建方法

1继承 Thread -> 重写 run 方法
2使用匿名内部类 -> 继承 Thread -> 重写 run 方法
3实现 Runnable 接口 -> 重写 run 方法
4使用匿名内部类 -> 实现 Runnable 接口 -> 重写 run 方法
5使用 lambda 表达式

        这五种创建方式都是等价的。

1.1 继承 Thread -> 重写 run 方法

//1.创建自己的线程类并继承Thread;
//2.重写run方法;
//3.创建Thread实例;
//4.运行MyThread线程;
class MyThread extends Thread{
    @Override
    public void run() {
        while (true){
            System.out.println("MyThread!");
        }
    }
}
public class Thread_Demo1 {
    public static void main(String[] args) {
        Thread thread = new MyThread();
        thread.start();

        while (true){
            System.out.println("main!");
        }
    }
}

1.2 使用匿名内部类 -> 继承 Thread -> 重写 run 方法

//1.以匿名内部类的方式创建一个继承于Thread的子类,重写run方法;
//2.变量名thread指向这个子类的实例;
//3.启动线程thread;
public class Thread_Demo3 {
    public static void main(String[] args) {
        Thread thread = new Thread(){
            @Override
            public void run() {
                while (true){
                    System.out.println("MyThread!");
                }
            }
        };
        thread.start();

        while (true){
            System.out.println("main!");
        }
    }
}

1.3 实现 Runnable 接口 -> 重写 run 方法

//1.创建一个类,实现Runnable接口;
//2.重写run方法;
//3.实现Runnable接口的子类实例化;
//4.将runnable作为参数,构造Thread类实例;
//5.启动线程thread;
class MyThread implements Runnable{
    @Override
    public void run() {
        while (true){
            System.out.println("MyThread!");
        }
    }
}
public class Tread_Demo2 {
    public static void main(String[] args) {
        Runnable runnable = new MyThread();
        Thread thread = new Thread(runnable);
        thread.start();

        while (true){
            System.out.println("main!");
        }
    }
}

1.4 使用匿名内部类 -> 实现 Runnable 接口 -> 重写 run 方法

//1.以匿名内部类的方式创建一个实现了runnable接口的类,重写run方法;
//2.把这个实现类作为Thread的构造方法的参数,创建Thread对象;
//3.启动线程thread;
public class Thread_Demo4 {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    System.out.println("MyThread!");
                }
            }
        });

        while (true){
            System.out.println("main!");
        }
    }
}

1.5 使用 lambda 表达式

//1.使用lambda表达式作为参数构造Thread实例;
//2.重新写run方法,这里的run方法是一个匿名函数;
//3.启动线程thread;
public class Thread_Demo5 {
    public static void main(String[] args) {
        Thread thread = new Thread(()-> {
            while (true){
                System.out.println("MyThread!");
            }
        });
        thread.start();

        while (true){
            System.out.println("main!");
        }
    }
}

二、查看线程的方法

以下介绍两种查看线程的方法:

1通过JDK自带工具 jconsole 查看
2通过 IDEA Debug调试器 查看

        查看线程时,必须保证线程是在运行中的。

2.1 jconsole 工具

找到 jconsole 工具:

jconsole 工具的路径:在JDK安装路径下的bin文件夹下。
如何找到JDK:确保已经安装过JDK,在命令行窗口中输入:java -verbose 后,输出的的第一行就包含了路径:

打开 jconsole 工具:

使用管理员权限下打开,否则打开后选项可能为空白。
找到本地进程中的Java进程。
进程的名字通常由包名+类名组成,是程序员自己取的名字,双击进入。

找到线程选项卡,查看线程:

2.2 IDEA Debug 调试器


阅读指针 -> 《线程类 Thread 的常见方法和属性》

链接生成中.........


http://www.niftyadmin.cn/n/5215155.html

相关文章

python pip安装第三方包时报错 error: Microsoft Visual C++ 14.0 or greater is required.

文章目录 1.问题2.原因3.解决办法 1.问题 pip install 的时候报错一大堆,其中有这么一段话 👇 error: Microsoft Visual C 14.0 or greater is required. Get it with "Microsoft C Build Tools": https://visualstudio.microsoft.com/visua…

RedLock底层源码分析

RedLock底层源码分析 一、Redlock红锁算法 https://redis.io/docs/manual/patterns/distributed-locks/官网说明 1、为什么要学习这个?怎么产生的? ​ 一个很直接的问题,当我使用redis锁的那台机器挂了,出现了单点故障了&#…

②⑩② 【读写分离】Sharding - JDBC 实现 MySQL读写分离[SpringBoot框架]

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Sharding-JDBC Sharding-JDBC介绍使用 Shardin…

SpringBoot修改启动图标

公司基于SpringBoot框架再次定制了一个框架,那要怎么让自己封装的框架逼格高一点? 那门面就要与众不同, 哈哈哈!!!! 艺术文字网站: patorjk.com

Java基于协同过滤算法开发的springboot+vue服装商城

演示视频 https://www.bilibili.com/video/BV1oH4y127fq/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 主要功能:用户可以浏览商品和特价商品,加入购物车,直接下单支付,在我的个人中心里可以管理自己的…

mybatis配置文件中配置类型别名的方式

在MyBatis配置文件&#xff08;通常是mybatis-config.xml&#xff09;中&#xff0c;可以通过以下方式配置类型别名&#xff1a; 1. 使用typeAliases元素配置全局类型别名 <configuration> <typeAliases> <typeAlias alias"YourAlias" type"…

C 标准库 - <stdlib.h>和<string.h>详解

目录 C 标准库 - 简介 库变量 库宏 库函数 实例 C 标准库 - 简介 库变量 库宏 库函数 实例 C 标准库 - <stdlib.h> 简介 C 标准库中的 <stdlib.h> 是 C 标准库的头文件之一&#xff0c;包含了一些常用的函数和类型&#xff0c;主要用于内存管理、字…

[element-ui] el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案

问题描述 在没有进行任何操作的时候&#xff0c;使用 this.$refs.xxxx 无法获取el-dialog中的内部元素&#xff0c;这个问题会导致很多bug. 官方解释&#xff0c;在open事件回调中进行&#xff0c;但是open()是弹窗打开时候的会调&#xff0c;有可能在此处获取的时候&#xff…